2015-09-05 54 views
0

隨着Hash.new服用塊緩存值的快速方法,可以按如下方式創建緩存:爲哈希

cache = Hash.new do |hash, key| 
    hash[key] = expensive_calculation(key) 
end 

爲何如此複雜?

cache = Hash.cache do |key| 
    expensive_calculation(key) 
end 

這樣的版本會更快,因爲只有一個參數傳遞給塊。從我的經驗來看,這有很大的不同。

回答

2

您的提議意味着該塊每個鍵僅被評估一次,並且其值被緩存爲該鍵。

但是,這不是使用此功能的唯一方法。人們可能想要爲相同的密鑰多次計算該值。在你的建議中,這是無法完成的。它缺乏靈活性。