まつもと ゆきひろです 英語がいやになったんで引っ越してきました。 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に定義して、::ではスーパークラス の検索をその前でやめちゃうとか。