为什么 Ruby 哈希使用 eql?而不是==

Why does Ruby hashes use eql? and not ==

我在 Ruby 中看到了很多平等的概念。

==
eql?
===
equal?

而且它们都有不同的语义。对我来说应该只有两个,一个是引用相等,另一个是值相等。我不明白为什么 Ruby 需要 eql?===.

我发现 this question 表示区别仅在于值以及值和类型。

具体来说,我不明白为什么 Hash 也需要检查类型(通常我们在 == 方法本身中测试)

Hash 要求它的键必须支持 eql? 因为它内部需要哈希码。

例如,1 == 1.0为真,而1.eql? 1.0为假。 11.0 显然具有不同的哈希码,因此不能将它们视为 Hash.

中的等效键