我偶然发现了这个操作符:
ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
=> true
这是什么?它的行为看起来不像“不匹配”。
答案 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 !=~