u16suzuの blog

u16suzu のブログです。

Hash.newにブロックを渡す

以下の記事を読んで初めて知ったのでメモ。

Ruby で メモ化カッコカリ( #rubytokai 発表メモ) - 名古屋で数学するプログラマ(仮) 

Hash.new にブロックを渡すことができる。

このブロックはすぐには実行されずに、h["key"] と言う形で参照されたキーがhash内に存在しない時に 呼ばれる。いわゆる遅延実行。

h = Hash.new do |hash, key|
  hash[key] = 9999 + 9999 # 思いつかないけど何か時間のかかる処理
end

h["a"]
p h["a"] # => 19998
p h["a"] # => 19998

これを利用してメモ化を実装できる。