ruby - "==="运算符在 Ruby 中有什么作用?

标签 ruby

<分区>

Possible Duplicate:
=== vs. == in Ruby

我最近看到它使用了几次,但无法弄清楚它的作用。谁能说明它是如何工作的?

最佳答案

就像 Ruby 中的所有其他方法(或者实际上几乎所有面向对象的语言)一样,

a === b

表示 a 类的作者希望它表示的任何含义。

但是,如果您不想混淆您的同事,惯例是 ===大小写包含 运算符。基本上,它是一个 bool 运算符,它会提出以下问题:“如果我有一个标有 a 的抽屉,将 b 放入该抽屉是否有意义? "

另一种表述是“如果 a 描述了一个集合,b 会是该集合的成员吗?

例如:

 (1..5) === 3           # => true
 (1..5) === 6           # => false

Integer === 42          # => true
Integer === 'fourtytwo' # => false

  /ell/ === 'Hello'     # => true
  /ell/ === 'Foobar'    # => false

=== 运算符的主要用法是在 case 表达式中,因为

case foo
when bar
  baz
when quux
  flurb
else
  blarf
end

被翻译成(大致)类似的东西

_temp = foo

if bar === _temp
  baz
elsif quux === _temp
  flurb
else
  blarf
end

请注意,如果要搜索此运算符,通常称为三等号运算符三等号运算符大小写等号运算符 .我真的不喜欢那些名字,因为这个运算符与相等性完全没有任何关系。

特别是,人们会期望相等是对称的:如果 a 等于 b,那么 b 最好也等于 一个。此外,人们会期望相等性是可传递的:如果 a == bb == c,则 a == c。虽然实际上没有办法保证在像 Ruby 这样的单一调度语言中,您至少应该努力保留这个属性(例如,通过遵循 coerce 协议(protocol))。

但是,对于 === 没有对称性或传递性的期望。事实上,它在设计上很是对称的。这就是为什么我不喜欢将它称为甚至远程类似于平等的任何东西。这也是为什么我认为,它应该被称为 ~~~ 之类的其他名称。

关于ruby - "==="运算符在 Ruby 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579052/

相关文章:

html - 如何克服 Nokogiri 的 "unknown encoding name - macintosh"错误

ruby - 将空字符串就地转换为 nil?

ruby-on-rails - 解析包含 GMT 偏移时间的时区名称字符串

ruby-on-rails - 当我在新项目上尝试命令 Rails Server 时,出现此错误

ruby - 在生产模式下运行瘦服务器不会加载我的 Assets

ruby - 在 Ruby 中解析 Twitter 和 Facebook 日期

ruby-on-rails - 将 Rails 中的主键更改为字符串

ruby-on-rails - ROR 按时间上彼此的接近程度进行分组

ruby-on-rails - 如何重构这段 Rails 代码?

ruby - 在 ruby​​ 中 grep 或过滤 linux 输出以获取自定义事实