ごとけんです

In message "[ruby-list:8435] Re: how to use delegate"
    on 98/06/20, GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:

>やった、自力で書いたのと一字一句おなじだ \(^o^)/

あらら、間違って送っちゃったごめんなさい。

In message "[ruby-list:8427] Re: how to use delegate"
    on 98/06/19, Yukihiro Matsumoto <matz / netlab.co.jp> writes:
>まつもと ゆきひろです

>def DelegateClass(superclass)
>  klass = Class.new
>  methods = superclass.instance_methods
>  methods -= ["__getobj__","to_s","nil?","to_a","hash","dup","==","=~"]
>
>  klass.module_eval <<EOS
>  def initialize(obj)
>    @obj = obj
>  end
>EOS
>  for method in methods
>    klass.module_eval <<EOS
>    def #{method}(*args, &block)
>      begin
>	@obj.__send__(:#{method}, *args, &block)
>      rescue
>	$@[0,2] = nil
>	raise
>      end
>    end
>EOS
>  end
>
>  return klass;
>end

僕も、delegate を引き受けてくれる人を用意するために、
上のように 
klass.method_eval "def initialize(obj); @obj = obj; end" 
するという方法に行き着いた(格闘3時間)のですが、
この obj を渡さないといけないのが不満です。
つまり

>temp = [1, 3, 2, 5, 4]
>data = ExtArray.new(temp)

ではなく、

data1 = ExtArray.new(128)

とか、

data2 = ExtArray.new("noppo", "gonta")
data2 => ["noppo", "gonta"]

みたいのができるかな?と思って、
いろいろ試して見たけどことごとく失敗し、
できるのかできないのか分らなくて
あきらめてしまいました。

-- gotoken