2015-09-05 64 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

您的提议意味着该块每个键仅被评估一次,并且其值被缓存为该键。

但是,这不是使用此功能的唯一方法。人们可能想要为相同的密钥多次计算该值。在你的建议中,这是无法完成的。它缺乏灵活性。