From: ttate@... Date: 1998-09-01T13:52:32+09:00 Subject: [ruby-list:9386] Re: Delegator 立石です。 返答ありがとうございます。 今はちょっと時間がないので簡単な結果報告 だけになってしまいますが、詳しい結果は夜 くらいまでまって下さい。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