RubyでHashにデフォルト値を設定する
タグ: ruby / 初版公開: 2013-11-25

RubyのHashには存在しないキーにアクセスされた際のデフォルト値を設定することができる。デフォルトのデフォルト値はnilである。デフォルト値の設定には、コンストラクタの引数を与える方法と、コンストラクタにブロックを与える方法の、2通りがある。

コンストラクタの引数を与える方法

Hash.newの引数をデフォルト値とする方法である。デフォルト値として返されるのは、すべて同一のオブジェクトということに注意しよう。

以下の例ではHash.newでデフォルト値をhogeとしている。それをsub!piyoに変更すると、別のキーで返されるデフォルト値もpiyoになる事を示す。

hash = Hash.new('hoge')
p hash[:foo] # => "hoge"
hash[:foo].sub!('hoge', 'piyo')
p hash[:bar] # => "piyo"

コンストラクタにブロックを与える方法

Hash.newのブロックをデフォルト値とする方法である。存在しないキーにアクセスされる度にブロックが評価され、その結果が返される。

以下の例ではHash.newhogeを返すブロックを指定している。先ほどの例と同じように、それをsub!piyoに変更しているが、都度ブロックを評価した結果が返されるので、sub!は何らデフォルト値に影響を与えない。

hash = Hash.new{'hoge'}
p hash[:foo] # => "hoge"
hash[:foo].sub!('hoge', 'piyo')
p hash[:bar] # => "hoge"