「RubyのHash#mapがarrayを返すのが気に食わないとき、ありますよね」について
このエントリのコメント欄を見て。
たぶん普通はyieldなんだろうけど、最近b[
http://ujihisa.nowa.jp/entry/e2629919e3#comment
みたいな書き方をすることが多くってこうしてるだけなのです。
Proc#[]はProc#callだったよなぁ、と思い出す。
でもって、Proc#callよりはyieldの方が早いんじゃなかったっけ、ということをうろ覚えに思い出す。
なので計ってみた。
require 'benchmark' def hoge(&b) yield end def piyo(&b) b[] end n_repeat = 100000 block = lambda{ 1 + 2 } puts Benchmark::CAPTION puts Benchmark.measure{ n_repeat.times do hoge(&block) end } puts Benchmark::CAPTION puts Benchmark.measure{ n_repeat.times do piyo(&block) end }
user system total real 0.235000 0.000000 0.235000 ( 0.234000) user system total real 0.359000 0.000000 0.359000 ( 0.359000)
お、yieldの方が早い。
だいたいこんな時間差なのかね。それともブロックの中身とか呼び出すコンテキストのスタックの深さとかでもっと差が付くのかな。