Ruby是否會緩存方法的結果,以便在調用兩次時不需要對它進行兩次評估?Ruby會緩存將評估爲相同結果的方法的結果嗎?
我在Rails的工作,因此,例如,我可以做到以下幾點在哪裏存儲傳遞到Rails控制器中的一個變量,像這樣一個參數的時結果:
def foo_bar_method
case param[:foobar]
when 'foo' then 'bar'
when 'bar' then 'baz'
else 'barbaz'
end
result = foo_bar_method
puts result
puts result
這樣,我只評估foo_bar_method
一次。 Ruby會緩存此方法的結果(還是Rails會這樣做)?使用上面顯示的代碼會更快嗎,還是下面的代碼會導致相同的性能?
def foo_bar_method
case param[:foobar]
when 'foo' then 'bar'
when 'bar' then 'baz'
else 'barbaz'
end
puts foo_bar_method
puts foo_bar_method
它會緩存SQL查詢,但我不認爲上述方法的結果將被緩存。 – errata
注意:爲了做到這一點,Ruby必須確定該方法是否引用透明,這相當於解決停機問題。 –