なかだです。

At Thu, 7 Mar 2002 14:22:44 +0900,
石塚圭樹 wrote:
> >* lib/sync.rb:
> >  * initializeでのsuper呼び忘れがわかりやすくなるように
> >    例外をあげるようにした。
> 
> これって, mix-in系のモジュールでは全てある問題ですよね. monitor.rbと
> mutex_m.rbとか... 
> 
> オブジェクトを初期化するときにインクルードされているモジュールに関する初
> 期化がinitializeでしかできないところに問題があるような気がします.
> 
> object.extend Module
> 
> の時には, extend_objectを変更すればいいわけですが, 同様の仕組みと言うか
> initializeには関係なく呼ばれるメソッドがあるのが望ましくないでしょうか? 
> たとえば,オブジェクトを作成したときには, かならず module_initializeが呼
> ばれるとか?

こういう風に?

  class Module
    alias __extend_object__ extend_object
    def extend_object(obj)
      __extend_object__(obj)
      obj.instance_eval {module_initialize}
    end
  end

  module X
    def module_initialize
      super if defined?(super)
      p :X
    end
  end
  module Y
    include X
    def module_initialize
      super if defined?(super)
      p :Y
    end
  end

  Object.new.extend(Y)
  :X
  :Y


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦