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