まつもと ゆきひろです

In message "[ruby-list:9378] Delegator"
    on 98/09/01, ttate / jaist.ac.jp <ttate / jaist.ac.jp> writes:

|立石です。
|
|次のようなスクリプトですが、super
|の所でfaultしてしまいます。

1. 私のところではSEGVせずに

/tmp/test.rb:13:in `say': super: no superclass method `say' (NameError)
        from /tmp/test.rb:16

   となります.SEGVするのはバグだと思うのですが….環境とバー
   ジョンを教えて下さい.うちはlinuxで1.1c2,1.1c3,1.1d0で発
   生しませんでした.

2. SimpleDelegatorは転送先オブジェクトの持っているメソッドを
   特異メソッドとして定義します.ので,特異メソッドfoo.sayを
   定義するとSimpleDelegatorによる定義を上書きしてしまいます.
   ですから,superで呼べないでエラーになったのだと思います.

        foo = DelegateClass(Foo).new
        def foo.say
          ...
          super
        end

   とかなら動作するような気がするんですが.あるいはaliasを用
   意するとか.

        class <<foo
          alias say_orig say
          def foo.say
            ...
            say_orig
          end
        end

いかがでしょう?
                                まつもと ゆきひろ /:|)