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

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

==用于条件语句中的相等,如ifunless等等。 ===用于确定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