Ruby 檔案如下:
情商?如果 obj 和 other 參考相同的哈希鍵,則方法回傳 true。
所以為了用來#eql?比較兩個物件(或使用物件作為哈希鍵),物件必須以#hash有意義的方式實作。
為什么會出現以下情況?
class EqlTest
def hash
123
end
end
a = EqlTest.new
b = EqlTest.new
a.hash == b.hash # => true
a.eql? b # => false
我當然可以實作EqlTest#eql?,但繼承自的實作不應該已經Object是類似的東西hash == other.hash嗎?
感謝您的提示!
uj5u.com熱心網友回復:
這似乎實際上是相反的。eql?預期回傳true回傳相同hash值的物件,但未定義比較這些值。您只需覆寫兩者。
情商?如果 obj 和 other 參考相同的哈希鍵,則方法回傳 true。Hash 使用它來測驗成員是否相等。對于 eql? 回傳 true,則兩個物件的哈希值必須相等。那么任何覆寫 eql 的子類?還應該適當地覆寫散列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460561.html
下一篇:在Rails遷移中更新電子郵件域
