Ruby比较运算符? ==与===
==
用于在条件语句unless
平等等if
,等===
用于在case
语句确定平等。
作为一个例子,10不等于1..20,但它在这个范围内。因此,您可能希望能够将范围放入您的病例陈述中,并将其选中。另外,请注意,case语句翻译为b === a,如 'case a when then then end' – 2010-07-01 03:57:56
两者都只是在对象上调用的方法。这意味着对象决定哪个意味着什么。但是,Ruby中有关于这些不同的约定。通常,==
比===
严格 - a === b
将差不多总是如果a == b
是真的。阅读这篇文章的最佳地点是http://ruby-doc.org/core/classes/Object.html。向下滚动至关于==
和===
的不同部分。下面是一些我知道的惯例:
-
==
,当应用于纯Object
S,只会是真实的,如果一个是完全一样的其他 - 如果它们存储在相同的存储位置(这Ruby是如何在内部工作的)。但是,如果参数的类型不是Object,那么通常会覆盖此方法。 -
equal?
就像==
对于普通Object
s,但绝不会被子类覆盖。 -
===
用于:- 一个
is_a?
替代方案中,向后。String === 'str'
是正确的。 - 与正则表达式匹配。
/s[at]r*/ === 'str'
是正确的。
- 一个
你可以找到===
各种类这些类的文档在特定的含义,例如,Range
版本是在这里(用于include?
的同义词):http://ruby-doc.org/core/classes/Range.html#M000691
这是一个重写'=='的好例子,以便它可以完成您(可能)期望的字符串。将字符串文字和指向“相同”字符串的变量比较为“==”和“.equal”。 – Telemachus 2010-07-01 13:55:55
有一个非常坚实的回答这个[有什么区别平等?,eql?,===和==?](http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-和) – 2014-10-07 22:59:41