ハイウェスト日記経由で、「Groovy 1.8 beta3 からClosureのメモ化ができるようになった」とのことを知り、情報を探してみました。
を読むとクロージャに以下の3つのメソッドが追加されています。
- memoize()
- memoizeAtMost(n)
- memoizeAtLeast(n)
- memoizeBetween(m, n)
メモ化と似たようなことは前に、Mapのデフォルト値設定(Map#withDefault{})を使ってやってみたりしたことがありましたが、要はパラメータに応じた呼び出し結果のキャッシュです。
今回定義されたクロージャのメソッドmemoize()を呼ぶと、「キャッシュするバージョンのクロージャ」を作って返してくれるようです。
ドキュメントコメントを読むと、キャッシュはLRUで保持されていて、引数ありバージョンはキャッシュサイズの制御に用いられるようです。