Ruby中的运算符==~是什么意思?

What is the meaning of operator ==~ in Ruby?

我正在修改现有的 ruby 代码。它具有以下代码行。谁能告诉我这是怎么回事。

if string ==~ /^ABC/
     do-something
elsif string == "some string"
     do-something
else
     do-something
end

if 条件在这里做什么。我在谷歌上搜索了 ==~ 运算符,但一无所获。 我刚找到 =~ 的解释,意思是用正则表达式匹配字符串。 所以,如果上面的 if 条件有一个 = ,这意味着检查字符串是否以 ABC 开头。但是当我 运行 代码时,这并没有发生。即使字符串以 ABC 开头,它也不会进入 if.

我不确定这是一个错误还是故意使用 ==~

一元运算符 ~ 的优先级高于 ===~ 因此:

string ==~ /^ABC/

只是一种容易混淆的写法:

string == (~/^ABC/)

但是 Regexp#~ 有什么作用呢?精美手册说:

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

$_是“gets或readline输入的最后一行字符串”。这给了我们:

string == (/^ABC/ =~ $_)

这根本没有任何意义,因为右侧将是一个数字或 nil 而左侧可能是一个字符串。仅当 string.nil? 且正则表达式匹配失败时条件才会为真,但有更好的方法来做到这一点。

我认为你有两个问题:

  1. ==~ 打错了,应该是 =~.
  2. 您的测试套件有漏洞,可能整个代码库都适合一个漏洞。

另请参阅 What is the !=~ comparison operator in ruby? 了解类似问题。