Ruby =〜vs ===运算符

西尔维奥·梅奥洛(Silvio Mayolo)

我主要===用于将值匹配到Ruby中的模式。最近,我发现该语言还支持=~正则表达式运算符。

Ruby文档定义===为“壳体平等”和=~为“图案匹配”。

大小写相等–对于类Object,实际上与调用#==相同,但通常被后代覆盖以在case语句中提供有意义的语义。

模式匹配-由子代(尤其是Regexp和String)重写以提供有意义的模式匹配语义。

通过实验,我发现它===适用于正则表达式,类名,文字值,甚至是范围,而=~似乎仅返回正则表达式的有用值。我的问题是:我为什么要使用=~似乎===支持一切=~,然后再支持我是否在这里=~想做一些不同的事情?

恩德涅科夫

首先,=~是对称的:

'string' =~ /regex/

/regex/ =~ 'string'

两者都可以。

其次,正如您所指出的,===可以与其他类一起使用。如果要匹配字符串,则应使用运算符进行...匹配。由于某种原因,它被称为案例运算符-case在内部使用它。

case foo
when bar then x
when baz then y
else z
end

是相同的:

if bar === foo
  x
elsif baz === foo
  y
else
  z
end

显式使用===被认为是单项的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章