[ruby-list:37831] Re: reference from nested class to a constant in a module included by the parent class

From: matz@... (Yukihiro Matsumoto)
Date: 2003-06-27 13:51:27 UTC
List: ruby-list #37831
まつもと ゆきひろです

In message "[ruby-list:37830] reference from nested class to a constant in a module included by the parent class"
    on 03/06/27, NISHIMATSU Takeshi <t-nissie@imr.tohoku.ac.jp> writes:

|ネストしたクラスから親クラスでincludeしたModule内の定数を参照
|する場合, 下の例のように モジュール名:: をつけなければNameError
|になるようです. 直感的には モジュール名:: を省略できてもよいと
|思うのですがどうでしょう. それともなにか理由があるのでしょうか.

あるクラスから見える定数は

  自分で定義されたもの
  その外側のクラスで定義されたもの
  そのまた外側で定義されたもの(以下トップレベルまで続く、トップレベル含まない)
  スーパークラスで定義されたもの
  そのスーパークラスで定義されたもの(以下Objectまで続く、Object含まない)

です。外側のクラスにincludeされているモジュールで定義されて
いる定数はこの条件に合致しませんので直接参照できません。

この理由は

  * 参照できる定数をできるだけ静的に解決したい
  * 参照できる定数をできるだけ定義が直接見えるものに限定したい

からです。

In This Thread