[ruby-list:50244] Re: Hash.new([])の挙動について

From: "H.Hiro" <main@...>
Date: 2015-10-27 04:47:46 UTC
List: ruby-list #50244
H.Hiroと申します。

a = Hash.new([])
a["foo"] << 1 # ... (1)
a["foo"] << 2
a.keys # => [] # ... (2)

この(2)がひどく不自然に感じたのですが、よく考えたら、

a = {}
a["foo"] # => nil # ... (3)
a.keys # => []

(3)の部分で新たにキーを生成するわけではない、と思うと納得がいきました。
(1)は挙動としては「a["foo"]
という値を取り出して、その値に1を追加している(aというハッシュそのものを改変しているのではなく、その参照している先の値を改変しているだけ)」ということですね。

In This Thread