Marcello said:
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}]