什么是红宝石中的!=〜比较运算符?

前端之家收集整理的这篇文章主要介绍了什么是红宝石中的!=〜比较运算符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我偶然发现这个运算符:
ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true

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

解决方法

这不是一个运算符,这是两个操作符写成一个操作符.

operator precedence table(最高到最低):

[] []=
**
! ~ + - [unary]
[several more lines]
<=> == === != =~ !~

另外,Regexp类有一个unary ~ operator

~ rxp → integer or nil
Match—Matches rxp against the contents of $_. Equivalent to rxp =~ $_.

所以你的表达式相当于:

"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

猜你在找的Ruby相关文章