From: Edwin Fine Date: 2007-02-16T13:26:25+09:00 Subject: Re: Hash.new({}) astonishment Marcello Barnaba wrote: >>> h = Hash.new({}) > => {} >>> h[:a][:b] = 1 > => 1 >>> h > => {} >>> h[:a] > => {:b=>1} >>> h.keys > => [] >>> h.values > => [] > > ?? http://www.ruby-doc.org/core/classes/Hash.src/M002873.html Hash.new(obj) => aHash If obj is specified, this single object will be used for all default values. irb(main):001:0> h = Hash.new({}) => {} irb(main):002:0> h[:a] = 12345 # default object = 12345 => 12345 irb(main):003:0> h[:b] = 45678 # default object = 45678 => 45678 irb(main):004:0> h[:a] => 12345 irb(main):005:0> efine@ender:~/ruby/ckjm$ irb irb(main):001:0> h = Hash.new({}) => {} irb(main):002:0> h[:a][:b] = 12345 # single default object now = 12345 => 12345 irb(main):003:0> h => {} irb(main):004:0> h[:xyzzy] => {:b=>12345} irb(main):005:0> h[0] => {:b=>12345} irb(main):006:0> h[0].object_id == h[:xyzzy].object_id => true irb(main):007:0> h[109123].object_id == h[:not_there].object_id => true irb(main):008:0> h => {} irb(main):009:0> h = Hash.new {|hash,key| hash[key] = {}} => {} irb(main):010:0> h[:a][:b] = 12345 => 12345 irb(main):011:0> h => {:a=>{:b=>12345}} irb(main):012:0> h.keys => [:a] irb(main):013:0> h.values => [{:b=>12345}] -- Posted via http://www.ruby-forum.com/.