Memoization保存了长时间执行的结果,以便在再次调用时不再重复.
记忆的一个例子:
class A
def initialize
end
def do_some_long_calculation
@do_some_long_calculation ||= my_calc_here
end
end
Run Code Online (Sandbox Code Playgroud)
这意味着一旦我们调用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
Run Code Online (Sandbox Code Playgroud)
如您所见,这里我们立即在A类的init上进行冗长的计算,而在第一个示例中,我们只在调用精确方法时进行计算.
长计算仍然只进行一次,但是在类的初始化时而不是在显式调用时.