[]=
メソッド使用時に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
、キャッシュされた値を返すために2つのハッシュルックアップを行うため、遅くなりますが、行ごとに読み取ると、メソッドよりも理にかなっていますcached
.
暗黙の戻り値を使用することは Ruby を素晴らしいものにするものの 1 つだと思いますが、値を設定するときの暗黙の戻り値の使用には常に疑問を抱いていました。
だから私の質問は: からの暗黙のリターンを使用し(hash[key] = val)
ますか?