ruby - Ruby 使用 == AND eql 有什么好的理由吗? ? (与 to_a 和 to_ary 类似)

标签 ruby methods

我知道eql? Hashes 使用它来查看对象是否与键* 匹配,而您匹配

def ==(rb)

如果您想支持 == 运算符,但哈希不使用 == 一定有充分的理由。这是为什么?你什么时候会有 == 和 eql 的定义? 是等价的(例如,一个是另一个的别名)?

同样,为什么除了to_a之外还要有to_ary?

这个问题是对 answer 的回应有人给了我another question .

* 当然一个Hash也假设eql? == true 表示哈希码相等。

此外,重写相等基本上是一个糟糕的主意吗? ?

最佳答案

== 检查两个值是否相等,而 eql?检查它们是否相等且类型相同。

irb(main):001:0> someint = 17
=> 17
irb(main):002:0> someint == 17
=> true
irb(main):003:0> someint.eql? 17
=> true
irb(main):004:0> someint.eql? 17.0
=> false
irb(main):005:0> someint == 17.0
=> true
irb(main):006:0>

如你所见,eql?还将测试两个值是否为同一类型。在与 17.0 比较的情况下,等同于 false,这是因为 someint 不是浮点值。

关于ruby - Ruby 使用 == AND eql 有什么好的理由吗? ? (与 to_a 和 to_ary 类似),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770418/

相关文章:

java - 使用 JNI 从 native C++ 调用 Java 方法时出错(ACCESS_VIOLATION 错误)

java - return 语句有问题

ruby - 获取两个数组的确切差异

mysql - Ruby on Rails 中的联接查询

ruby-on-rails - RoR 字符类正则表达式

ruby - 如何使用 Ruby 查找字符串中最后一次出现的数字?

javascript - 不同条件下的 React 调用方法

android - Mac OS X 上 Android Studio 中方法建议的键盘快捷键是什么?

javascript - 如何将方法添加到由构造函数创建的数组对象

ruby - 我如何使用 ruby​​ 忽略 csv 文件中的换行符但保留漂亮的源文件?