立石です。

返答ありがとうございます。
今はちょっと時間がないので簡単な結果報告
だけになってしまいますが、詳しい結果は夜
くらいまでまって下さい。m(_ _)m

matz / netlab.co.jpさん(09月01日10時):
matz>>1. 私のところではSEGVせずに
matz>>
matz>>/tmp/test.rb:13:in `say': super: no superclass method `say' (NameError)
matz>>        from /tmp/test.rb:16
matz>>
matz>>   となります.SEGVするのはバグだと思うのですが….環境とバー
matz>>   ジョンを教えて下さい.うちはlinuxで1.1c2,1.1c3,1.1d0で発
matz>>   生しませんでした.

linux 2.0.35
egcs 1.03
libc5.4.44(?)
libstdc++をリンクさせた Ruby 1.1c3 です。

;; make LDFLAGS+="-lstdc++" としてmakeしました。

実際にはクラスFooに相当するものは組み込み
クラスだったのを書くのをわすれてましたが、
たぶんスクリプト上のクラスでも同様の結果
だったような気がします。
今、自宅でないので夜にでもデバッガにかけて
みます。

matz>>2. SimpleDelegatorは転送先オブジェクトの持っているメソッドを
matz>>   特異メソッドとして定義します.ので,特異メソッドfoo.sayを
matz>>   定義するとSimpleDelegatorによる定義を上書きしてしまいます.
matz>>   ですから,superで呼べないでエラーになったのだと思います.
matz>>
matz>>        foo = DelegateClass(Foo).new
matz>>        def foo.say
matz>>          ...
matz>>          super
matz>>        end
matz>>
matz>>   とかなら動作するような気がするんですが.あるいはaliasを用
matz>>   意するとか.

現在の環境はSunOS4で、ruby-1.1c3ですが、
それをやると、newのところで

delegate.rb:93:in `initialize': Wrong # of arguments
(0 for 1) (ArgumentError)

となってしまいます。
aliasを使うというアイデアの方は
うまくいきました。


			Takaaki Tateishi <ttate / jaist.ac.jp>