Натолкнулся на следующее странное поведение в 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