ruby中的!=〜比较运算符是什么?

我偶然发现了这个算子:

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/ => true 

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

这不是一个运算符,它是两个运算符,看起来像一个运算符。

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

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

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

~rxp→整数或零
匹配匹配$_的内容rxp 。 相当于rxp =~ $_

所以你的表达相当于:

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

Regexp#=~运算符(与更熟悉的String#=~ )返回一个数字:

rxp = ~str→整数或nil
匹配匹配rxp与str。

因此,您将最终结果视为真实,因为将字符串与数字进行比较是错误的。

例如:

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

!~=~ NOT !=~的倒数