From: Gavin Kistner Date: 2005-11-24T00:19:53+09:00 Subject: Re: what is the ruby way to do this? On Nov 22, 2005, at 5:45 PM, Bill Kelly wrote: > @attributes = Hash.new {|h,k| h[k] = Array.new} Hey, thanks for that! I had no idea that the block form of Hash creation had block arguments. Sure it's in 'ri', but who looks there? ;) I often see people suggesting: Hash.new{ [] } without realizing that this doesn't set the value on the hash, just returns a blank array. I've never been able to use the block constructor syntax because it was so useless (because I also didn't know that <<= was a valid compound method). foo = Hash.new{ [] } foo[:bar] << 1 foo[:foo] << 2 foo[:bar] << 3 p foo #=>{} foo = Hash.new{ |h,v| h[v]=[] } foo[:bar] << 1 foo[:foo] << 2 foo[:bar] << 3 p foo #=>{:bar=>[1, 3], :foo=>[2]} foo = Hash.new{ [] } foo[:bar] <<= 1 foo[:foo] <<= 2 foo[:bar] <<= 3 p foo #=>{:bar=>[1, 3], :foo=>[2]}