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.newにhogeを返すブロックを指定している。先ほどの例と同じように、それをsub!でpiyoに変更しているが、都度ブロックを評価した結果が返されるので、sub!は何らデフォルト値に影響を与えない。
hash = Hash.new{'hoge'}
p hash[:foo] # => "hoge"
hash[:foo].sub!('hoge', 'piyo')
p hash[:bar] # => "hoge"
 
 
