mfo*_*ett 4 methods groovy memoization
我有一个纯函数的方法,需要一段时间才能运行.我想记住这个方法,以便后续调用更快.我可以在Groovy的文档中看到你可以通过以下方式记住闭包:
foo = {…}.memoize()
但是,我找不到记忆成员方法的方法.有没有办法做到这一点?
在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核心源代码(为了名声和荣耀):-)