From: matz@... (Yukihiro Matsumoto) Date: 1997-04-08T13:35:35+09:00 Subject: [ruby-list:2679] Re: help まつもと ゆきひろです In message "[ruby-list:2664] Re: help" on 97/04/07, sinara@blade.nagaokaut.ac.jp writes: |原です。 |一方、同じ名前のメッソッドを複数のモジュールで定義して、多 |重にインクルードできますよね。しかも上書きされる前のメッソ |ッドの内容を忘れることはなく、何重にも super で呼び出せる。 そうです.モジュールはスタッカブルなんです. In message "[ruby-list:2665] $_-module [Re: help ]" on 97/04/07, 石塚圭樹 writes: |けいじゅ@SHLジャパンです. |> 自クラス -> includeされたモジュール -> スーパークラス |> |>になっています. | |もっと正確には: | |自クラス -> includeされたモジュール -> スーパークラス -> スーパークラ |スでincludeしたモジュール -> ... | |でいいんですよね? もっと正確には 自クラス -> 自クラスでincludeされたモジュール群 -> スーパークラス -> スーパークラスでincludeしたモジュール群 -> ... です.includeするということはその時点でのモジュールの連鎖の どこかにモジュールが存在することしか保証しないことに注意して ください. |やっと話しが元に戻って, 気になることについてですが, トップレベルでイン |クルードされると method_missing()を利用した Proxyクラスなどは動作が変 |わることになりますね. つまり, $_-moduleがあったとして, それをトップ |レベルでインクルードするとStringを利用したProxyクラスなどは動作が異なっ |てくることになりますね. こういう現象は問題ある/ない?? 「定義されているわけだからmethod_missingが呼ばれない」という 問題ですね.これはなかなかむずかしい問題をはらんでいますね. 現時点では「注意して使ってください」としかいえないですけど. 可能な対応は * 自分の責任で気を付けてもらう * main.includeではprivateメソッドだけしかincludeしないよう にする. * private methodの名前空間をpublic methodの名前空間と分離 する. * 別の名前空間を導入する などが考えられます.後ろのものほど大げさになるわけですが,個 人的にはあまり大げさにはしたくないなあと思っています. まつもと ゆきひろ /:|)