在Groovy中记住成员方法

mfo*_*ett 4 methods groovy memoization

我有一个纯函数的方法,需要一段时间才能运行.我想记住这个方法,以便后续调用更快.我可以在Groovy的文档中看到你可以通过以下方式记住闭包:

foo = {…}.memoize()

但是,我找不到记忆成员方法的方法.有没有办法做到这一点?

tim*_*tes 7

编辑:

在Groovy 2.2.X中会有一个新的AST变换@Memoized,它会为你做这个.

import groovy.transform.Memoized

class Woo {
  @Memoized
  def sum( int a, int b ) {
    Thread.sleep( 1000 )
    a + b
  }
}

new Woo().with {
  println new Date()
  println sum( 1, 2 )
  println new Date()
  println sum( 1, 2 )
  println new Date()
}
Run Code Online (Sandbox Code Playgroud)

原始答案

另一种选择是编写某种AST转换,以允许您使用注释方法@Memoize,并为您完成memoization.

我可以找到几个例子,一个用于将Redis作为Memoization缓存添加到Grails,另一个这里似乎允许单个参数方法记忆通过基本上操纵AST看起来像流行病的答案的第二部分.

由于你可能想要多个参数,我会选择流行病的第二种方法.但是编写AST变换可能是一个有趣的实验/侧面项目?

这是正确的,我可以看到回到Groovy核心源代码(为了名声和荣耀):-)