Ruby比较运算符? == vs. ===

时间:2010-07-01 03:16:11

标签: ruby comparison operators

==和===有什么区别?你应该在哪个时使用?

2 个答案:

答案 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)

==用于ifunless等条件语句中的相等性。===用于确定case语句中的相等性。