[]=
使用方法时是否可以使用ruby的隐式返回值,我正在徘徊
[]=
使用rb_hash_aset
并且它正在返回val
- http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-5B-5D-3D
这是一个小代码来演示我的意思:
require 'benchmark'
CACHE = {}
def uncached_method(key)
warn "uncached"
rand(100)
end
def cached(key)
CACHE[key] || (CACHE[key] = uncached_method(key))
end
def longer_cached(key)
return CACHE[key] if CACHE[key]
CACHE[key] = uncached_method(key)
CACHE[key]
end
Benchmark.bm(7) do |x|
y = rand(10000)
cached(y)
x.report("shorter:") { 10000000.times do cached(y) end }
x.report("longer:") { 10000000.times do longer_cached(y) end }
end
当然longer_cached
速度较慢,因为它会执行两次哈希查找以返回缓存值,但是当您逐行读取它时,它比该cached
方法更有意义。
我认为使用隐式返回是使 ruby 很棒的事情之一,但我一直质疑它们在设置值时的使用。
所以我的问题是:你会使用隐式 return from(hash[key] = val)
吗?