[#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:20311] Re: [ruby-cvs] ruby, ruby/lib: * eval.c (ev_const_defined, ev_const_get), variable.c

From: nobu.nakada@...
Date: 2003-05-31 07:28:14 UTC
List: ruby-dev #20311
なかだです。

At Sat, 31 May 2003 08:38:14 +0900,
Yukihiro Matsumoto wrote:
> 英語がいやになったんで引っ越してきました。

そうしようかと思ってました。

> |> 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では
> なくて。で、そうでない時にはエラーを出すべきではないかと。

それは同意しますが、普通の定数がそうなっていないのにautoloadだ
け動作が違うのはどうかなと。

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

普通の定数のほうをまず変えないと、autoloadだけでは意味ないと思
います。

TOPLEVEL_CONSTモジュールに定義するというのを以前出した覚えがあ
りますが、Kernelのほうが変更が少なくて済むのかな。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread