Memoization
和lazy initialization
技术之间的确切差异。
关于红宝石的例子很棒。
答案 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上进行冗长的计算,而在第一个例子中,我们只在调用精确方法时进行计算。
长计算仍然只进行一次,但是在类的初始化时而不是在显式调用时。