记忆功能

Memoizing 基本上是一种缓存方法结果的方法。当通常使用相同的参数调用方法并且结果的计算需要时间时,这可能很有用,因此提高了性能。

从 Groovy 2.2 开始,可以使用 @Memoized 注释来注释方法。

想象一下以下类:

class MemoDemo {
  def timesCalculated = 0

  @Memoized
  def power2(a) {
    timesCalculated++
    a * a
  }
}

现在,在第一次调用此方法并使用之前未调用的数字时,将执行该方法:

assert power2(2) == 4
assert timesCalculated == 1

但是,如果我们使用相同的参数再次调用它:

assert power2(2) == 4
assert timesCalculated == 1

timesCalculated 保持不变,但该方法返回了相同的结果。但是,使用不同的参数调用它:

assert power2(3) == 9
assert timesCalculated == 2

导致该方法的主体再次被调用。