【问题标题】:What is the difference between ==~ and != in Groovy?Groovy 中 ==~ 和 != 有什么区别?
【发布时间】:2015-03-03 20:14:54
【问题描述】:

这些有什么区别?

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

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

【问题讨论】:

  • 不是==~,而是==~。至少在Java中。你说的是 Java 还是 Groovy?
  • 我说的是 Groovy,哎呀。
  • 在查看文档时,您能否突出显示它们之间的差异不清楚的地方? groovy-lang.org/operators.html

标签: groovy syntax comparison logical-operators


【解决方案1】:

在 groovy 中,==~ 运算符(又名“匹配”运算符)用于正则表达式匹配。 != 只是一个普通的旧常规“不等于”。所以这些是非常不同的。

参见。 http://groovy-lang.org/operators.html

【讨论】:

  • ==~ 作为匹配运算符是否适用于variable ==~ 6
  • 其实是个好问题。通常正则表达式匹配需要斜杠,但对def var = 3; 的简短测试导致:var ==~ 4;falsevar ==~ 3;true,因此可能存在某种特殊处理。不过我不是一般的专家。
  • @SotiriosDelimanolis 最终阐明这个问题:groovy 中的斜线不是对模式的特殊要求,而只是另一种声明字符串的方式。所以/foo/实际上和"foo"是一样的。而且我相信 groovy 只是将6 视为"6"(因为变量是无类型的def)。
【解决方案2】:

在 Java 中,!=“不等于”~“按位非”。你实际上会做variable == ~6

在 Groovy 中,==~ 运算符是“正则表达式匹配”。例如:

  1. "1234" ==~ /\d+/ -> 计算结果为 true
  2. "nonumbers" ==~ /\d+/ -> 计算结果为 false

【讨论】:

    【解决方案3】:

    在 Groovy 中,您还必须注意,除了 ==~(别名“匹配运算符”)之外,还有 =~(别名“查找运算符”)和 ~(别名“模式运算符”)。

    全部解释here

    ==~ 结果类型:Boolean/boolean(Groovy 中没有原语,一切都不像看起来的那样!)

    =~ 结果类型:java.util.regex.Matcher

    ~ 结果类型:java.util.regex.Pattern

    我认为 Groovy 解释器/编译器可以通过上下文区分 ~ 用作模式运算符和 ~ 用作 bitwise NOT(即它在 Java 中的使用):前者将后面总是跟着一个模式,它总是用分隔符括起来,通常是/

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      相关资源
      最近更新 更多