hakeの日記

Windows環境でプログラミングの勉強をしています。

ハッシュの初期値

Rubyの勉強

ハッシュのインスタンス作成時に初期値を与えることができるけど、すべてのキーが同じオブジェクトの値を指してしまうみたい。今まで初期値はnilしか使ったことが無かったので知らなかった。
違うオブジェクトを与えるにはブロックで代入させるようにする

h = Hash.new("foo")
p h["a"]             #=>"foo"
p h["b"]             #=>"foo"
p h["a"].object_id   #=>21626570
p h["b"].object_id   #=>21626570

h["a"].succ!
p h["a"]             #=>"fop"
p h["b"]             #=>"fop"


h = Hash.new{|h,k| h[k] = "foo"}
p h["a"]             #=>"foo"
p h["b"]             #=>"foo"
p h["a"].object_id   #=>21626350
p h["b"].object_id   #=>21626310

h["a"].succ!
p h["a"]             #=>"fop"
p h["b"]             #=>"foo"