From: Yusuke ENDOH Date: 2008-12-28T14:19:26+09:00 Subject: [ruby-core:20929] Re: [Bug #937] Recursive Hashes As Keys Hi, 2008/12/28 Charles Comstock : > Bug #937: Recursive Hashes As Keys > http://redmine.ruby-lang.org/issues/show/937 > > Author: Charles Comstock > Status: Open, Priority: Low > Target version: Ruby 1.8.7 > > On 1.8.7 hashes which use themselves as keys appear to lack a meaningful value, yet are stored correctly in the keys and values list. > > $ ruby -v > ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] > $ ruby -e 'h = {}; h[h] = h; p h,h[h],h.keys[0],h.values[0]' > {{...}=>{...}} > nil > {{...}=>{...}} > {{...}=>{...}} > > Is this intended behavior or a bug? It's an intended change from 1.8.7. The hash value of h changes when it is assigned: $ ruby18 -e 'h = {}; p h.hash; h[h] = h; p h.hash' 0 1 Mutable objects (such as Array and Hash) are basically improper for a hash key if you may modify them. If it is absolutely necessary, you can use Hash#rehash: $ ruby18 -e 'h = {}; h[h] = h; h.rehash; p h[h]' {{...}=>{...}} -- Yusuke ENDOH