缓存哈希值的更快方法

A faster way for caching values for a hash

随着Hash.new占用一个块,可以创建一个缓存如下:

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

为什么这么复杂?

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

这样的版本会更快,因为只有一个参数被传递给块。根据我的经验,这有很大的不同。

您的提议暗示块每个键只被计算一次,并且它的值被缓存用于键。

但是,这不是使用此功能的唯一方法。人们可能想要为同一个键多次计算值。在你的提议中,这是不可能做到的。缺乏灵活性。