2014-10-12 140 views

回答

5

记忆正在保存长时间执行的结果,以便在再次调用时不再重复。

为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类的初始化,而在第一个例子中,我们仅做计算时的精确方法叫做。

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