基于自定义事件的Groovy@Memoize过期
我使用groovy处理批处理作业,我计划使用groovy的@Memoize注释缓存域对象,但问题是过期,我想在作业完成时使缓存过期。有没有办法告诉groovy让缓存从代码中过期 根据,基于自定义事件的Groovy@Memoize过期,groovy,memoization,Groovy,Memoization,我使用groovy处理批处理作业,我计划使用groovy的@Memoize注释缓存域对象,但问题是过期,我想在作业完成时使缓存过期。有没有办法告诉groovy让缓存从代码中过期 根据,@Memoized仅具有最大值和保护缓存大小参数 由于封面下的AST将通过Closure::memoize创建memoize机制,因此您可以使用map和memoized闭包来模拟它,这些闭包可以被释放: class Job { def log = [] def repoBase = [
@Memoized
仅具有最大值和保护缓存大小参数
由于封面下的AST将通过Closure::memoize
创建memoize机制,因此您可以使用map和memoized闭包来模拟它,这些闭包可以被释放:
class Job {
def log = []
def repoBase = [
sum: { a, b ->
log << "sum $a and $b"
a + b
},
multiply: { a, b ->
log << "multiply $a and $b"
}
]
def repo
def startJob() {
repo = repoBase.collectEntries { key, value ->
[(key): value.memoize()]
} as Expando
}
def withJob(Closure c) {
startJob()
c.delegate = repo
c.delegateStrategy = Closure.DELEGATE_FIRST
c(this)
repo = null
}
}
非常肯定答案是不正确的:谢谢,蒂姆,我也有同样的印象,但我想反复检查,所以这里提出的问题,经过几天的等待,我会得出结论,没有办法。我不知道怎样才能使你的评论正确。
j = new Job()
j.withJob {
multiply 3, 4
multiply 3, 4
multiply 8, 8
sum 9, 9
sum 1, 2
sum 9, 9
}
assert j.log == [
"multiply 3 and 4",
"multiply 8 and 8",
"sum 9 and 9",
"sum 1 and 2"
]