2014-10-12 143 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類的初始化,而在第一個例子中,我們僅做計算時的精確方法叫做。

長計算仍然只進行一次,但在初始化類而不是在明確調用時。