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

Lai*_*uan 15 ruby operators

我偶然发现了这个算子:

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true
Run Code Online (Sandbox Code Playgroud)

这是什么?它的行为看起来不像"不匹配".

mu *_*ort 19

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

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

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

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

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

所以你的表达相当于:

"abc" != (/abc/ =~ $_)
Run Code Online (Sandbox Code Playgroud)

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

rxp = ~str→integer或nil
Match-Matches rxp vs str.

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

例如:

>> $_ = 'Where is pancakes house?'
=> "Where is pancakes house?"
>> 9 !=~ /pancakes/
=> false
>> ~ /pancakes/
=> 9
Run Code Online (Sandbox Code Playgroud)


Ken*_*Ken 17

!~=~NOT 的反转!=~