■ [ruby] Hashのデフォルト値にHashを設定しようとしてはまった話 h = {} ary.each do |x, y, z| h[x] ||= {} h[x][y] = z end をもっと短くしようとして、 h = Hash.new{ {} } ary.each do |x, y, z| h[x][y] = z end としたら上手く動かない。あれっ? デフォルト値が{}じゃなくて数値の場合、例えば h = Hash.new{ 0 } ary.each do |x| h[x] += 1 end みたいのはちゃんと動くわけです。上のとどう違う? h[x][y] = z はどういう動作になるか考えてみよう。 hにxというキーがある場合: h[x]というハッシュに、(y, z)のペアを保存。 hにxというキーがない場合: ブロックが呼ばれて、その値が返る。返り値であるハッシュに、(