From: Austin Ziegler Date: 2005-06-26T01:28:08+09:00 Subject: Re: Hash hidden in hash with default object On 6/25/05, Marcel Molina Jr. wrote: > I observed this odd behavior when setting a hash to have as its default > value another hash which itself has a default value set: > >> hash_in_hash = Hash.new(Hash.new([])) > => {} > >> hash_in_hash[:a][:b] << :incognito > => [:incognito] > >> hash_in_hash > => {} > >> hash_in_hash[:a] > => {} > >> hash_in_hash.keys > => [] > >> hash_in_hash[:a][:b] > => [:incognito] > >> hash_in_hash[:a].keys > => [] That's now how you want to do this in any case, because that doesn't actually *set* the key. Even if it did, it's still probably not what you want, because all of the secondary hashes will be referencing the same array as their default value, e.g.: hash_in_hash[:a][:c] << :cognito => [:incognito, :cognito] Instead, do: hash_in_hash = Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] = [] } } -austin -- Austin Ziegler * halostatue@gmail.com * Alternate: austin@halostatue.ca