[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20309] Re: [ruby-cvs] ruby, ruby/lib: * eval.c (ev_const_defined, ev_const_get), variable.c

From: matz@... (Yukihiro Matsumoto)
Date: 2003-05-30 23:38:14 UTC
List: ruby-dev #20309
まつもと ゆきひろです

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

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に定義して、::ではスーパークラス
の検索をその前でやめちゃうとか。

In This Thread

Prev Next