在 Ruby 中,!=~ 比较运算符是什么?

18
我无意中发现了这个运算符:
ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true

这是什么?它的行为看起来不像“不匹配”。


似乎不是一个真正的运算符。很可能是 !=~ - Marc B
2个回答

20

这不是一个运算符,而是两个操作符写在一起看起来像一个操作符。

根据运算符优先级表(从高到低):

[] []=
**
! ~ + - [一元]
[更多行]
<=> == === != =~ !~

此外,Regexp类有一个一元~运算符

~ rxp → integer or nil
匹配-将rxp$_的内容匹配。等同于rxp =~ $_

所以你的表达式等同于:

"abc" != (/abc/ =~ $_)

使用 Regexp#=~ 操作符(并非与更常见的String#=~相同)将返回一个数字:

rxp =~ str → integer or nil
匹配 - 将rxp与str进行匹配。

因此,最终结果为true,因为将字符串与数字进行比较是false。

例如:

>> $_ = 'Where is pancakes house?'
=> "Where is pancakes house?"
>> 9 !=~ /pancakes/
=> false
>> ~ /pancakes/
=> 9

20

!~=~ 的反义词,而不是 !=~


感谢分享这个。 - LandonSchropp

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