Bug #4886
closedautoload in instance_eval doesn't work
Description
autoload を instance_eval の中で使うとうまく動きません。
% ./ruby -e'instance_eval{autoload :R,"a";p R}'
-e:1:in block in <main>': uninitialized constant R (NameError) from -e:1:in
instance_eval'
from -e:1:in `'
Updated by kouji (Kouji Takao) over 13 years ago
=begin
1.8系ではどうなっていたかと思って確認してみました。
以下のようにRを参照したときに"a"をロードしようとして例外が発生するのですね。
$ ruby -v -e 'instance_eval { autoload :R, "a"; p R }'
ruby 1.8.7 (2009-11-09 patchlevel 202) [i686-darwin9.8.0]
-e:1: no such file to load -- a (LoadError)
from -e:1:in `instance_eval'
from -e:1
=end
Updated by naruse (Yui NARUSE) over 13 years ago
Kouji Takao wrote:
1.8系ではどうなっていたかと思って確認してみました。
以下のようにRを参照したときに"a"をロードしようとして例外が発生するのですね。$ ruby -v -e 'instance_eval { autoload :R, "a"; p R }'
ruby 1.8.7 (2009-11-09 patchlevel 202) [i686-darwin9.8.0]
-e:1: no such file to load -- a (LoadError)
from -e:1:in `instance_eval'
from -e:1
はい、正確には a.rb または a.so (環境依存) ですが。
で、例えば a.rb が読み込みパスのどこかにあり、そこに R=1 とか書かれていた場合 1 が p で表示されます。
1.9.2 でもこの動作です。
現在の 1.9 だとそもそも読もうとすらしてませんね。
Updated by naruse (Yui NARUSE) over 13 years ago
- Target version set to 1.9.3
Updated by kosaki (Motohiro KOSAKI) over 13 years ago
- Category set to core
- Status changed from Open to Assigned
- Assignee set to naruse (Yui NARUSE)
1.9.3を狙うなら Assigned に変更されるべき。報告の雰囲気からしてなるせさんは自分で直すつもりだと勝手にみなしてなるせさんにアサインします
Updated by mrkn (Kenta Murata) over 13 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r32489.
Yui, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- load.c (rb_f_autoload): prevent to autoload for singleton
classes. fixes [Bug #4886] [ruby-dev:43816] - bootstraptest/test_autoload.rb: add tests for the above change.