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