在 ruby 1.8.6 中遇到以下奇怪的行为,在 1.8.7 中它似乎工作正常。有谁知道是什么原因造成的?
h = {}
key_1 = {1 => 2}
key_2 = {1 => 2}
h[key_1] = 3
p key_1 == key_2 # => true
p h.has_key?(key_2) # => expect true, get false, wtf?
原以为是在 Hash 类上实现了 hash 方法造成的。
p [key_1.hash, key_2.hash] # => [537787070, 537787060] (different)
但即使我覆盖了 Hash 的哈希方法
class Hash
def hash
return self.keys.hash + self.values.hash
end
end
p [key_1.hash, key_2.hash] # => [8,8] (same
p h.has_key?(key_2) # => false
在线 ruby 1.8.6 解释器结果的键盘链接:http: //codepad.org/7nCYMP4w