Ruby比较运算符? == 与 === [重复]

Posted

技术标签:

【中文标题】Ruby比较运算符? == 与 === [重复]【英文标题】:Ruby comparison operators? == vs. === [duplicate] 【发布时间】:2011-03-10 10:51:15 【问题描述】:

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

【问题讨论】:

What's the difference between equal?, eql?, ===, and ==? 有一个非常可靠的答案 【参考方案1】:

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

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

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

【讨论】:

一个很好的覆盖 == 的例子,以便它执行您(可能)期望的是字符串。比较 ==.equal 的字符串文字和指向“相同”字符串的变量。 哇!与 javascript 相比,Ruby 中的约定是相反的。不要混淆任何人...... 只有我觉得右操作数是左操作数的实例很奇怪吗?只是我缺乏经验?【参考方案2】:

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

【讨论】:

例如,10 不等于 1..20,但在那个范围内。因此,您可能希望能够将范围放在您的案例陈述中,并选择它。另外,请注意 case 语句在 case a when b then true end 等语句中转换为 b===a

以上是关于Ruby比较运算符? == 与 === [重复]的主要内容,如果未能解决你的问题,请参考以下文章

排序数组中的“==”不比未排序数组快吗? [重复]

Ruby初探

ruby 布尔运算符或 ||差异[重复]

Ruby语法“OR”运算符[重复]

Ruby逻辑运算符[重复]

无法理解 ruby​​ 逻辑运算符的结果 [重复]