我徘徊隱含的返回值,如果它使用[]=
方法是OK使用Ruby的從[] =
[]=
使用rb_hash_aset
時即可使用Ruby的隱式的返回值,它返回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真棒的事情之一,但我總是質疑他們在設置值時的使用。
所以我的問題是:你會使用從(hash[key] = val)
隱含返回?
爲什麼不使用'||'有意義?與自然語言不一樣嗎?例如,用英文,「(給我)'CACHE [key]',或者分配它,(然後把它給我)」。 – sawa