我偶然发现这个运算符:
ruby-1.9.2-p290 :028 > "abc" !=~ /abc/ => true
这是什么?它的行为看起来不像“不匹配”.
解决方法
这不是一个运算符,这是两个操作符写成一个操作符.
从operator precedence table(最高到最低):
[] []=
**
! ~ + -
[unary]
[several more lines]
<=> == === != =~ !~
另外,Regexp类有一个unary ~
operator:
~ rxp → integer or nil
Match—Matchesrxp
against the contents of$_
. Equivalent torxp =~ $_
.
所以你的表达式相当于:
"abc" != (/abc/ =~ $_)
而Regexp#=~
的运算符(不一样比较熟悉的String#=~
)返回一个数字:
rxp =~ str → integer or nil
Match—Matches rxp against str.
因此,将字符串与数字进行比较是错误的,因此您将成为您的最终结果.
例如:
>> $_ = 'Where is pancakes house?' => "Where is pancakes house?" >> 9 !=~ /pancakes/ => false >> ~ /pancakes/ => 9