uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

クロージャのメモ化

ハイウェスト日記経由で、「Groovy 1.8 beta3 からClosureのメモ化ができるようになった」とのことを知り、情報を探してみました。

を読むとクロージャに以下の3つのメソッドが追加されています。

  • memoize()
  • memoizeAtMost(n)
  • memoizeAtLeast(n)
  • memoizeBetween(m, n)

メモ化と似たようなことは前に、Mapのデフォルト値設定(Map#withDefault{})を使ってやってみたりしたことがありましたが、要はパラメータに応じた呼び出し結果のキャッシュです。

今回定義されたクロージャのメソッドmemoize()を呼ぶと、「キャッシュするバージョンのクロージャ」を作って返してくれるようです。

ドキュメントコメントを読むと、キャッシュはLRUで保持されていて、引数ありバージョンはキャッシュサイズの制御に用いられるようです。