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

From: Kunimi Ikeda <kunimi.ikeda@...>
Date: 2015-10-27 03:57:38 UTC
List: ruby-list #50240
いけだと申します。

a = {}
a['key'] = [] unless a['key']
a['key'] << 1
a['key'] << 2
a['key'] << 3

を簡単に書けないかと思い、

a = Hash.new([])
a['key'] << 1
a['key'] << 2
a['key'] << 3

と書いてみました。

すると実行はできましたが、どうも納得がいかない挙動になります。


irb(main):001:0> RUBY_VERSION
=> "2.2.3"
irb(main):002:0> a = Hash.new([])
=> {}
irb(main):003:0> a['key'] << 1
=> [1]
irb(main):004:0> a['key'] << 2
=> [1, 2]
irb(main):005:0> a['key'] << 3
=> [1, 2, 3]
irb(main):006:0> a
=> {}


aの値が私の想定とは反して {} になります。
想定は{"key"=>[1, 2, 3]} です。
a['key']の値は想定通り[1, 2, 3]となっています。


これはRubyとしては想定通りの動きなのでしょうか?

In This Thread

Prev Next