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
これを利用してメモ化を実装できる。