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

发布于 2024-12-09 06:42:43 字数 128 浏览 0 评论 0原文

我偶然发现了这个运算符:

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true

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

I found this operator by chance:

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/
 => true

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪花飘飘的天空 2024-12-16 06:42:43

这不是一个运算符,而是两个编写得像一个运算符的运算符。

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

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

另外,Regexp 类有一个 一元 ~ 运算符

~ rxp → 整数或 nil
匹配 - 将 rxp$_ 的内容进行匹配。相当于rxp =~ $_

所以你的表达式相当于:

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

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

rxp =~ str → 整数或 nil
匹配 - 将 rxp 与 str 进行匹配。

所以你的最终结果是 true,因为将字符串与数字进行比较是 false。

例如:

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

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
原谅过去的我 2024-12-16 06:42:43

!~=~ 的逆,而不是 !=~

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文