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

时间:2011-10-07 22:33:19

标签: ruby operators

我偶然发现了这个操作符:

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true
这是什么?它的行为看起来不像“不匹配”。

2 个答案:

答案 0 :(得分:20)

这不是一个运算符,而是两个运算符编写为一个运算符。

operator precedence table(从最高到最低):

  

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

此外,Regexp类有一个unary ~ operator

  

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

所以你的表达式相当于:

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

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

  

rxp = ~str→integer或nil
  匹配匹配rxp与str。

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

例如:

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

答案 1 :(得分:16)

!~=~ NOT !=~

相反