开发者

What is the !=~ comparison operator in ruby?

开发者 https://www.devze.com 2023-04-12 02:15 出处:网络
I found this operator by chance: ruby-1.9.2开发者_C百科-p290 :028 > \"abc\" !=~ /abc/ => true

I found this operator by chance:

ruby-1.9.2开发者_C百科-p290 :028 > "abc" !=~ /abc/
 => true

what's this? It's behavior doesn't look like "not match".


That's not one operator, that's two operators written to look like one operator.

From the operator precedence table (highest to lowest):

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

Also, the Regexp class has a unary ~ operator:

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

So your expression is equivalent to:

"abc" != (/abc/ =~ $_)

And the Regexp#=~ operator (not the same as the more familiar String#=~) returns a number:

rxp =~ str → integer or nil
Match—Matches rxp against str.

So you get true as your final result because comparing a string to a number is false.

For example:

>> $_ = 'Where is pancakes house?'
=> "Where is pancakes house?"
>> 9 !=~ /pancakes/
=> false
>> ~ /pancakes/
=> 9


!~ is the inverse of =~ NOT !=~

0

精彩评论

暂无评论...
验证码 换一张
取 消