为什么 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
为假。 1
和 1.0
显然具有不同的哈希码,因此不能将它们视为 Hash
.
中的等效键
我在 Ruby 中看到了很多平等的概念。
==
eql?
===
equal?
而且它们都有不同的语义。对我来说应该只有两个,一个是引用相等,另一个是值相等。我不明白为什么 Ruby 需要 eql?
和 ===
.
我发现 this question 表示区别仅在于值以及值和类型。
具体来说,我不明白为什么 Hash
也需要检查类型(通常我们在 ==
方法本身中测试)
Hash
要求它的键必须支持 eql?
因为它内部需要哈希码。
例如,1 == 1.0
为真,而1.eql? 1.0
为假。 1
和 1.0
显然具有不同的哈希码,因此不能将它们视为 Hash
.