Ruby のハッシュ値を定義して存在しないキーでも初期値で使用可能に!

Rubyでハッシュ値に存在しないキーにアクセスして

初期値を設定できるよう定義をしていきましょう。

 

まずは、同じオブジェクトを生成するパターン。

test = Hash.new('hello')
p test[:baa]
# => "hello"
p test
# => {}
a = test[:foo]
b = test[:boo]
p a.equal?(b)  # => true 同じオブジェクト

同じオブジェクトなのでequalでtrueが返ってきていますね。
この場合、パラメータを変更するとすべて変わってしまうので注意しましょう。

次は違うオブジェクトを生成するパターン。

test = Hash.new{'hello'}
p test[:baa]
# => "hello"
p test
# => {}
a = test[:foo]
b = test[:boo]
p a.equal?(b) # => false 違うオブジェクト

この場合は違うオブジェクトなのでequalでfalseが返ってきますね。

また、存在しないキーをアクセスした場合、初期値を設定する書き方もあります。
以下の通りです。

h = Hash.new{ |hash, k| hash[k] = 'hello'}
h[:foo]
h[:boo]
p h
# => {:foo=>"hello", :boo=>"hello"}

あまり見ないケースかもしれませんが覚えておくと役立つと思います(*^^*)

なにか参考になると幸いです(*^^*)