From: gotoken@... (GOTO Kentaro) Date: 1998-06-20T08:42:00+09:00 Subject: [ruby-list:8437] Re: how to use delegate ごとけんです In message "[ruby-list:8435] Re: how to use delegate" on 98/06/20, GOTO Kentaro writes: >やった、自力で書いたのと一字一句おなじだ \(^o^)/ あらら、間違って送っちゃったごめんなさい。 In message "[ruby-list:8427] Re: how to use delegate" on 98/06/19, Yukihiro Matsumoto writes: >まつもと ゆきひろです >def DelegateClass(superclass) > klass = Class.new > methods = superclass.instance_methods > methods -= ["__getobj__","to_s","nil?","to_a","hash","dup","==","=~"] > > klass.module_eval < def initialize(obj) > @obj = obj > end >EOS > for method in methods > klass.module_eval < 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