<分区>
Possible Duplicate:
=== vs. == in Ruby
我最近看到它使用了几次,但无法弄清楚它的作用。谁能说明它是如何工作的?
标签 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 == b
和 b == c
,则 a == c
。虽然实际上没有办法保证在像 Ruby 这样的单一调度语言中,您至少应该努力保留这个属性(例如,通过遵循 coerce
协议(protocol))。
但是,对于 ===
没有对称性或传递性的期望。事实上,它在设计上很不是对称的。这就是为什么我不喜欢将它称为甚至远程类似于平等的任何东西。这也是为什么我认为,它应该被称为 ~~~
之类的其他名称。
关于ruby - "==="运算符在 Ruby 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579052/
相关文章:
html - 如何克服 Nokogiri 的 "unknown encoding name - macintosh"错误
ruby-on-rails - 解析包含 GMT 偏移时间的时区名称字符串
ruby-on-rails - 当我在新项目上尝试命令 Rails Server 时,出现此错误
ruby - 在生产模式下运行瘦服务器不会加载我的 Assets
ruby - 在 Ruby 中解析 Twitter 和 Facebook 日期
ruby-on-rails - 将 Rails 中的主键更改为字符串
ruby-on-rails - ROR 按时间上彼此的接近程度进行分组