我主要===
用于将值匹配到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] 删除。
我来说两句