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

ker*_*lin 13 ruby comparison operators

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

Adr*_*ian 24

两者都只是在对象上调用的方法.这意味着对象决定了哪个意味着什么.但是,Ruby中有关于这些是如何不同的约定.通常情况下,==是不是严格===- a === b几乎如果总是真的a == b是.阅读此内容的最佳地点是http://ruby-doc.org/core/classes/Object.html.向下滚动到关于==和的不同部分===.以下是我所知道的一些惯例:

  • ==当应用于plain Objects时,只有当它们与另一个完全相同时才会成立 - 如果它们存储在相同的内存位置(这就是Ruby在内部工作的方式).但是,如果参数的类型不是Object,则通常会覆盖此方法.
  • equal?就像==普通Object的一样,但永远不会被子类覆盖.
  • === 是用来:
    • is_a?另一种选择,倒退.String === 'str'是真的.
    • 匹配正则表达式./s[at]r*/ === 'str'是真的.

您可以===在这些类的文档中找到各种类的具体含义,例如,Range版本在这里(同义词include?):http://ruby-doc.org/core/classes/Range.html#M000691


mip*_*adi -5

==用于判断语句中的相等性if,如unless、 等。===用于确定case语句中的相等性。

  • 例如,10 不等于 1..20,但它在该范围内。因此,您可能希望能够将范围放入案例声明中,并选择它。另请注意,在诸如“case a when b then true end”之类的语句中,case 语句会转换为 b===a (3认同)