まつもと ゆきひろです

英語がいやになったんで引っ越してきました。

In message "Re: [ruby-cvs] ruby, ruby/lib: * eval.c (ev_const_defined, ev_const_get), variable.c"
    on 03/05/31, nobu.nokada / softhome.net <nobu.nokada / softhome.net> writes:

|> 1  module X
|> 2    autoload :XXX, "x.rb"
|> 3  end
|> 4  p X::XXX'
|> 
|> 
|> On line 2, autoload is declared, so that "x.rb" will be loaded when
|> X::XXX is referenced.  And I believe "x.rb" should define XXX under X,
|> not ::XXX.
|
|Yes, it should be X::XXX now.

だとすると、上記のプログラムはエラーになるはずですが、現状ではなりませ
んよね。x.rbはXモジュールにXXX定数を定義する必要があります。::XXXでは
なくて。で、そうでない時にはエラーを出すべきではないかと。

|> On line 4, X::XXX is referenced, so that autoload is executed, "x.rb"
|> is loaded.  Then, in autoload process, it should check if X::XXX is
|> defined.  In this case, x.rb does not define XXX under X.  This means
|> autoload process should raise NameError.  Right?
|
|But ::XXX is defined, and it is visible as X::XXX via X.  wrong?
|
|I guess this is another (old) problem.

x.rbで定義したものがX::XXXという形で見えたとしてもエラーにしたいんです、
ということ。で、::XXXがX::XXXと見えるのは古い問題でなんとかしたいと思っ
てるんですが。トップレベル定数はKernelに定義して、::ではスーパークラス
の検索をその前でやめちゃうとか。