[#44310] プログラムに対して意図したとおりの文字列を渡す方法 — "Information Kanasansoft" <kanasansoft@...>

kanasanです。

9 messages 2007/12/05

[#44332] クラス:相互参照系の作成方法について質問です — "Saburoh Sakai" <sabroh@...>

はじめまして、さかいと申します。

12 messages 2007/12/11

[#44366] Rake改善プロジェクト — "Hajime Hoshi" <hajimehoshi@...>

東京大学修士 1 年の星一と申します。

14 messages 2007/12/19

[ruby-list:44374] Re: Rake 改善プロジェクト

From: Tadashi Saito <shiba@...2.accsnet.ne.jp>
Date: 2007-12-20 17:33:15 UTC
List: ruby-list #44374
斎藤と申します。

ものすーんごーい話がそれますが、

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って綴る時点で十分長ったらしいと思うので、
# 自分はあってもいいような気がします。

-- 
斎藤ただし

In This Thread