From: Tadashi Saito Date: 2007-12-21T02:33:15+09:00 Subject: [ruby-list:44374] Re: Rake 改善プロジェクト 斎藤と申します。 ものすーんごーい話がそれますが、 On Thu, 20 Dec 2007 05:24:57 +0900 rubikitch@ruby-lang.org wrote: > Rake::Task[:clobber].instance_eval{@actions = []} インスタンス変数をいじるだけならば、Object#instance_variable_setが無難 そうです。 class C def initialize @c = nil end end c = C.new { "set" => proc{ c.instance_variable_set(:@c,1) }, "eval" => proc{ c.instance_eval{ @c = 1 } } }.each do |name, pr| puts name.ljust(8) + Benchmark.measure{500_000.times(&pr)}.real.to_s end とかやると、手元のRuby 1.8.6-p111では set 0.487169027328491 eval 1.45795607566833 となり、3倍高速です。ちょっと書きづらいけど。 # instance_variable[](sym)とか[]=(sym, newval)とかがないのはやはり # 設計による意図的なものでしょうか…。 # instance_variableって綴る時点で十分長ったらしいと思うので、 # 自分はあってもいいような気がします。 -- 斎藤ただし