【发布时间】:2016-02-21 04:28:27
【问题描述】:
我主要使用=== 将值与Ruby 中的模式进行匹配。最近,我发现该语言还支持正则表达式的=~ 运算符。
Ruby Documentation 将 === 定义为“大小写相等”,将 =~ 定义为“模式匹配”。
Case Equality – 对于类 Object,实际上与调用 #== 相同,但通常被后代覆盖以在 case 语句中提供有意义的语义。
模式匹配——被后代(特别是正则表达式和字符串)覆盖以提供有意义的模式匹配语义。
通过实验,我发现=== 适用于正则表达式、类名、字面值甚至范围,而=~ 似乎只返回对正则表达式有用的值。我的问题是:我为什么要使用=~?似乎=== 支持=~ 所做的一切,然后是一些。我在这里遗漏了什么=~ 打算做不同的事情吗?
【问题讨论】:
-
regexp =~ str和regexp === str在我的系统上返回完全不同的结果。
标签: ruby regex operator-overloading