From: matz@... (Yukihiro Matsumoto) Date: 1996-11-30T02:11:20+09:00 Subject: [ruby-list:1147] Re: [Q] include module まつもと ゆきひろです. In message "[ruby-list:1145] [Q] include module" on 96/11/29, sinara@blade.nagaokaut.ac.jp writes: | |原です。質問です。 | |【1】モジュールをインクルードしても、すでにある関数/メッソッド |が再定義されないのはなぜでしょうか? モジュールで定義されたものはインクルードされた順に自クラスと スーパークラスの間に置かれます.ですから自クラスで定義した物 が常に優先です.その場合,モジュールで定義されたメソッドを superで呼び出すことができます. |【2】一群の関数 f1, f2, f3,... の定義を実行時に変えたい時に、い |い方法はあるでしょうか? There's more than one way to do that.ですが,前提によってい ろいろだと思います. 一番簡単なのは case mode when 'A' def f1 ... end def f2 ... end when 'B' ... end でしょうね. |などとしたらうまくいくのではないかと思ったのですが、以前に既に |f1, f2, f3,.. が定義されているとだめなんですよね。 includeを使う場合自クラスの定義の方が優先されますね.ですか ら自クラスで定義されていないことを保証する必要がありますね. undefを使ってもこれは解消できません. # undefは継承を遡ってメソッドをキャンセルするので,includeし # たメソッドもキャンセルしてしまうのです. でも自クラスで(スーパークラスではなく)定義されていないという のはそれほど厳しい制限ではないでしょう? まつもと ゆきひろ /:|)