ごとけんです
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