在 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类上哈希方法的实现所致。
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