From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-08-20T17:19:13+09:00 Subject: [ruby-dev:189] include [Re: new sync.rb release] けいじゅ@日本ラショナルです. なんか込み入ってきたので, ruby-devに引っ越しましょう. In [ruby-list :03728 ] the message: "[ruby-list:3728] Re: new sync.rb release ", on Aug/20 14:54(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >まつもと ゆきひろです >|でも, インクルードされるモジュールもインクルードするクラスに応じた初期 >|化をしたいこともあるわけで... >そこまですることかしらん? そうですねえ... それもいえるといえばいえるんですが... できれば嬉しいこ ともあるということで(^^;;; >まあ,やろうということが尋常ではない(と思う)ので,美しい必要 >は無いと思うんですけど…. それはそうなんですけど... >|include-hook見たいなものではなくて, extendと同様な実装にするというのは >|駄目? >|class Foo >| include Bar -> Bar.include_module(Foo) > >まあ,前例があるからこっちの方が採用しやすいですね.どうしよ >うかなあ. おお. やった!! 順番入れ替えます. >そういうのは構わないんですか? 中途半端でない? おお. なかなか難しい問題ですね... 1. >でも,これではモジュールがモジュールをインクルードして,別の >クラスがそのインクルードされたモジュールをインクルードした場 >合とか(ややこしい), えーと: module Foo def Foo.module_include(cl) super ... end ... end module Bar include Foo ... end class Baz include Bar ... end ってなっていた時ですね. この場合は実装を変えれば良いと思います. module Foo def Foo.module_include(cl) super ... end ... end module Bar def Bar.module_include(cl) Foo.module_include(cl) super ... end ... end class Baz include Bar ... end Barは, 静的にFooをincludeするのではなく, includeされた時にFooをインク ルードしてあげればいいんじゃないかしら? 定数アクセスの問題がありますが, その時は, BarもFooをincludeすることに なるのかな... ちょっと無駄だけど. # 良く考えたらこの問題は, extendでも発生しますね... 2. >モジュールをインクルードしたクラスのサブクラスに対する初期設定とかで >問題が発生するか能性がありますよね(静的な処理じゃないから). こちらはextendでは発生しない問題ですね. module Foo def Foo.module_include(cl) super ... end ... end class Bar ... end class Baz < Bar ... end えーと. 2つの場合があって, Foo.module_includeが * Fooに何らかの影響を及ぼしたい時 * Barに何らかの影響を及ぼしたい時 がありますね. 前者のようなことを行いたいってことはあまりないんじゃない かと思います. 後者はサブクラスにも継承されますのであまり問題ないんじゃ ないでしょうか? __ ..........................................石塚 圭樹@日本ラショナル... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---