Memoization
和lazy initialization
技术之间的确切区别是什么。
关于 ruby 的例子会很棒。
最佳答案
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 上立即进行冗长的计算,而在第一个示例中,我们仅在调用确切方法时才进行计算。
长计算仍然只进行一次,但是在类的初始化时而不是在显式调用时。
关于ruby - 记忆化与惰性初始化/评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322132/