Sil*_*olo 3 ruby regex operator-overloading
我大部分时间都在使用===Ruby中的模式匹配值.最近,我发现该语言还支持=~运算符的正则表达式.
的Ruby文档定义===为"壳体平等"和=~为"图案匹配".
Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写,以在case语句中提供有意义的语义.
模式匹配 - 由后代(特别是Regexp和String)覆盖,以提供有意义的模式匹配语义.
通过实验,我发现它===适用于正则表达式,类名,文字值甚至范围,而=~似乎只返回正则表达式的有用值.我的问题是:我为什么要用=~?它似乎===支持一切=~,然后一些.我在这里缺少=~哪些意图以不同的方式做什么?
首先=~是对称的:
'string' =~ /regex/
Run Code Online (Sandbox Code Playgroud)
和
/regex/ =~ 'string'
Run Code Online (Sandbox Code Playgroud)
两者都有效.
其次,如您所述,===与其他类一起使用.如果要匹配字符串,则应使用运算符进行...匹配.它被称为case运算符有一个原因 - case在内部使用它.
case foo
when bar then x
when baz then y
else z
end
Run Code Online (Sandbox Code Playgroud)
是相同的:
if bar === foo
x
elsif baz === foo
y
else
z
end
Run Code Online (Sandbox Code Playgroud)
明确使用===被认为是单一的.