Изменяемые объекты (такие как Array
и Hash
) в основном не подходят для хеш-ключа, если вы можете изменить их.В этом случае хэш был изменен в точке вставки (поскольку он был вставлен в себя!) И поэтому оставлен в неправильном состоянии.
Если это абсолютно необходимо, вы можете использовать Hash#rehash
для исправления состояния объекта:
hash = {}
hash[hash] = hash
hash.rehash # !!!!
hash.keys.first == hash # true
hash.values.first == hash # true
hash[hash] #=> {{...}=>{...}}
hash.key?(hash) # true
hash[hash.keys.first] #=> {{...}=>{...}}
hash[{}] # nil