もりきゅうです。ちょいと長文。 中村暁史 Nakamura Akifumi さんは書きました: >特定のインスタンス変数をつけ(させ)るmodule、とか。 >たとえばCompositeモジュールが@parentと@childrenを付けるなど。 >@parentはまだいいですが、@childrenは配列などでないと駄目なんで >initializeのときに付けてあげないとしょーがない。 > >その場合は勿論、M#initializeの中にsuperを書くのを忘れずに。 あ,そうかあ。ちょいと試作してみましたが.. -- composite.rb module Composite def initialize(*args) super @children = [] print "composite #{type} inited\n" end def add(child) @children.push child print "added #{child}\n" end end class Widget def initialize(gc) print "widget #{type} inited\n" end end class Window include Composite def initialize(gc, width, height) super print "window inited\n" end end class Frame < Widget include Composite def initialize(gc, caption) super gc end end class Button < Widget def initialize(gc, caption, width, height) super gc end end class GraphicContext end gc = GraphicContext.new win = Window.new gc, 320, 200 frame = Frame.new gc, 'customize' btn = Button.new gc, 'ok', 40, 20 win.add frame frame.add btn -- 結果 composite Window inited window inited widget Frame inited composite Frame inited widget Button inited added #<Frame:0x9e53c> added #<Button:0x9e514> -- 挙動の考察 1. Window.new で Window.initialize が呼ばれる 2. Window.initialize での super は Composite.initialize を呼ぶ 3. Composite.initalize での super は..あれ? どうなるんじゃあ^^; 新たな謎を呼んでしまいましたね。^^;;; >>@s1 は M1 のものではなく,M1 を include したクラス >>例えば C のものである。 # だからインスタンス変数って言うんだな >その言い回しは、違うんでないでしょか。 >インスタンス変数はクラスのもんじゃなくて >インスタンスのものです。 >#だからインスタンス変数って言うんだな はうん,そうでした。私の表現は不適切でした。 ---- Kazuhiro Yoshida moriq.kazuhiro / nifty.ne.jp