我无意中发现了这个运算符:
ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
=> true
这是什么?它的行为看起来不像“不匹配”。
这不是一个运算符,而是两个操作符写在一起看起来像一个操作符。
根据运算符优先级表(从高到低):
[] []=
**
! ~ + -
[一元]
[更多行]
<=> == === != =~ !~
此外,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
!~
是 =~
的反义词,而不是 !=~
!
和=~
。 - Marc B