“==”和“===”有什么区别?在何时使用它们?
“==”和“===”有什么区别?在何时使用它们?
两者都是在对象上调用的方法。这意味着对象决定什么意思。但是,在Ruby中有关于它们差异的约定。通常情况下, ==
比 ===
更严格-如果a == b
,那么 a === b
几乎总是为真的。阅读有关此内容的最佳位置是 http://ruby-doc.org/core/classes/Object.html 。向下滚动到有关 ==
和 ===
的不同部分。以下是我知道的一些约定:
==
应用于普通 Object
时,只有在一个与另一个完全相同-如果它们存储在相同的内存位置(这是Ruby内部运作方式)。但是,如果参数不是Object类型,则通常会覆盖此方法。 equal?
对于普通的 Object
来说,就像 ==
一样,但永远不会被子类覆盖。 ===
用于:
is_a?
的替代品,向后。 String ==='str'
为真。 / s [at] r * / ==='str'
为真。您可以在这些类的文档中找到有关 ===
的具体含义,例如, Range
版本在此处( include?
的同义词): http://ruby-doc.org/core/classes/Range.html#M000691 。
==
的例子是字符串,这样它就能做你(可能)期望的事情。比较字符串字面量和指向“相同”字符串的变量的==
和.equal
。 - Telemachus==
用于条件语句中的相等判断,如 if
、unless
等。而===
用于case
语句中的确定相等性。
case a when b then true end
这样的语句中,条件语句会被翻译成b === a
。 - Joshua Cheek