Memoization vs Lazy初始化/评估

时间:2014-10-12 05:18:10

标签: ruby

Memoizationlazy initialization技术之间的确切差异。

关于红宝石的例子很棒。

1 个答案:

答案 0 :(得分:6)

Memoization保存了长时间执行的结果,以便在再次调用后不再重复。

记忆的一个例子:

class A
  def initialize
  end

  def do_some_long_calculation
    @do_some_long_calculation ||= my_calc_here
  end
end

这意味着,一旦我们调用do_some_long_calculation,结果就会保存到@do_some_long_calculation,后续调用不会触发my_calc_here方法。

延迟初始化只在需要时执行此长执行,而不是在初始化对象时执行。

实际上,第一个代码示例也演示了延迟初始化。 非延迟初始化版本如下所示:

class A
  def initialize
    @do_some_long_calculation = my_calc_here
  end

  def do_some_long_calculation 
    @do_some_long_calculation 
  end
end

如您所见,这里我们立即在A类的init上进行冗长的计算,而在第一个例子中,我们只在调用精确方法时进行计算。

长计算仍然只进行一次,但是在类的初始化时而不是在显式调用时。