Ruby比较运算符? == vs. ===
==和===有什么区别? 你应该在哪个时候使用?
==
用于条件语句中的相等,如if
, unless
等等。 ===
用于确定case
语句中的相等性。
两者都只是在对象上调用的方法。 这意味着对象决定哪个意味着什么。 但是,Ruby中有关于它们如何不同的约定。 通常, ==
比===
更严格 – 如果a == b
a === b
几乎总是为真。 阅读此内容的最佳地点是http://ruby-doc.org/core/classes/Object.html 。 向下滚动到关于==
和===
的不同部分。 以下是我所知道的一些惯例:
-
==
,当应用于普通Object
,只有当它们与另一个完全相同时才会为真 – 如果它们存储在同一个内存位置(这就是Ruby在内部工作的方式)。 但是,如果参数的类型不是Object,则通常会覆盖此方法。 -
equal?
对于普通Object
就像==
,但永远不会被子类覆盖。 -
===
用于:- 一个
is_a?
另类,倒退。String === 'str'
为true。 - 匹配正则表达式。
/s[at]r*/ === 'str'
为真。
- 一个
您可以在这些类的文档中找到各种类的===
的具体含义,例如, Range
版本在这里( include?
的同义词include?
): http : //ruby-doc.org/core/classes/ Range.html#M000691