Groovy中的==~和!=之间有什么区别?

18

这些之间有什么区别?

为什么要使用其中一个而不是另一个?

def variable = 5
if( variable ==~ 6 && variable != 6 ) {
  return '==~ and != are not the same.'
} else {
  return '==~ and != are the same.'
}

4
иҝҷдёҚжҳҜ'=='пјҢиҖҢжҳҜ'=='е’Ң''гҖӮиҮіе°‘еңЁJavaдёӯжҳҜиҝҷж ·зҡ„гҖӮдҪ иҜҙзҡ„жҳҜJavaиҝҳжҳҜGroovyпјҹ - user253751
1
我在谈论Groovy,哎呀。 - kschmit90
3
查看文档时,您能否强调它们之间不清楚的差异是什么?http://groovy-lang.org/operators.html - Jeroen Vannevel
3个回答

36
在Groovy中,==~ 运算符(也称为“匹配”运算符)用于正则表达式匹配。而!= 只是一个普通的“不等于”。所以它们是非常不同的。
参考:http://groovy-lang.org/operators.html

1
==~作为匹配运算符是否适用于variable ==~ 6 - Sotirios Delimanolis
1
其实是个好问题。通常正则表达式匹配需要斜杠,但是使用 def var = 3; 进行简短测试后,结果为:var ==~ 4;false,而 var ==~ 3;true,因此可能存在某种特殊处理方式。虽然我不是 Groovy 专家。 - Marvin
1
@sotiriosdelimanolis 为了更好地解答这个问题:在Groovy中,斜杠并不是模式的特殊要求,而只是声明字符串的另一种方式。因此,/foo/实际上与"foo"相同。我认为Groovy只是将6视为"6"(因为变量是未经类型定义的def)。 - Marvin

12
在Java中,!=表示“不等于”,~表示按位非运算。因此,variable == ~6实际上是在比较变量是否等于按位非6。
在Groovy中,==~操作符表示“正则表达式匹配”。例如:
  1. "1234" ==~ /\d+/ -> 结果为true
  2. "nonumbers" ==~ /\d+/ -> 结果为false

7
在Groovy中,除了别名为“匹配运算符”的==~外,还有别名为“查找运算符”的=~和别名为“模式运算符”的~。所有这些都在此处有详细解释。 ==~的结果类型为:Boolean/boolean(在Groovy中没有原始类型,一切并非表面所见!)。 =~的结果类型为:java.util.regex.Matcher~的结果类型为:java.util.regex.Pattern
我认为Groovy解释器/编译器可以通过上下文区分作为模式运算符的~和作为按位非~(即在Java中的用法):前者将始终后跟模式,并且模式将始终用定界符括起来,通常是/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接