立石です。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-list:9381] Re: Delegator
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>    生しませんでした.

すみません。こちらはどうやらおそらく自作モジュール
のバグのようです。自宅に帰って再現させてみると上記
と同じようなエラーとなってしまいました。
拡張モジュールの方はいろいろと変更してしまったあと
なので今となってはどういう状況だったのか分かりません。
お騒がせしてしまいました。m(_ _)m

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>    とかなら動作するような気がするんですが.

こちらは、DelegateClass(Foo)によって生成させた
クラスにinitializeを再定義する必要があるため
DelegateClass(Foo).new という書き方はできない
ようです。aliasを使ってごまかすよりもこちらの方法で
なんとか initialize 再定義の手間を省けないか考えた
のですが次のような感じの修正はいかがでしょう?

*** delegate.rb.old	Tue Sep  1 17:55:38 1998
--- delegate.rb	Tue Sep  1 18:02:03 1998
***************
*** 69,81 ****
  
  #
  def DelegateClass(superclass)
    klass = Class.new
    methods = superclass.instance_methods
    methods -= ::Kernel.instance_methods
    methods |= ["to_s","to_a","inspect","hash","eql?","==","=~","==="]
    klass.module_eval <<EOS
!   def initialize(obj)
!     @obj = obj
    end
  EOS
    for method in methods
--- 69,82 ----
  
  #
  def DelegateClass(superclass)
+   name = superclass.to_s
    klass = Class.new
    methods = superclass.instance_methods
    methods -= ::Kernel.instance_methods
    methods |= ["to_s","to_a","inspect","hash","eql?","==","=~","==="]
    klass.module_eval <<EOS
!   def initialize(*argv)
!     @obj = #{name}.new(*argv)
    end
  EOS
    for method in methods
***************
*** 94,103 ****
  end
  
  if __FILE__ == $0
!   class ExtArray<DelegateClass(Array)
!     def initialize()
!       super([])
      end
    end
  
    ary = ExtArray.new
--- 95,105 ----
  end
  
  if __FILE__ == $0
!   class NamedArray<DelegateClass(Array)
!     def set_name(name)
!       @name = name
      end
+     attr_reader :name
    end
  
    ary = ExtArray.new