2010-07-01 131 views
13

==和===有什么区别?你应该使用哪一个?Ruby比较运算符? ==与===

+0

有一个非常坚实的回答这个[有什么区别平等?,eql?,===和==?](http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-和) – 2014-10-07 22:59:41

回答

0

==用于在条件语句unless平等等if,等===用于在case语句确定平等。

+3

作为一个例子,10不等于1..20,但它在这个范围内。因此,您可能希望能够将范围放入您的病例陈述中,并将其选中。另外,请注意,case语句翻译为b === a,如 'case a when then then end' – 2010-07-01 03:57:56

22

两者都只是在对象上调用的方法。这意味着对象决定哪个意味着什么。但是,Ruby中有关于这些不同的约定。通常,=====严格 - a === b差不多总是如果a == b是真的。阅读这篇文章的最佳地点是http://ruby-doc.org/core/classes/Object.html。向下滚动至关于=====的不同部分。下面是一些我知道的惯例:

  • ==,当应用于纯Object S,只会是真实的,如果一个是完全一样的其他 - 如果它们存储在相同的存储位置(这Ruby是如何在内部工作的)。但是,如果参数的类型不是Object,那么通常会覆盖此方法。
  • equal?就像==对于普通Object s,但绝不会被子类覆盖。
  • ===用于:
    • 一个is_a?替代方案中,向后。 String === 'str'是正确的。
    • 与正则表达式匹配。 /s[at]r*/ === 'str'是正确的。

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

+1

这是一个重写'=='的好例子,以便它可以完成您(可能)期望的字符串。将字符串文字和指向“相同”字符串的变量比较为“==”和“.equal”。 – Telemachus 2010-07-01 13:55:55