Project

General

Profile

Actions

Bug #4886

closed

autoload in instance_eval doesn't work

Added by naruse (Yui NARUSE) over 13 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.3dev (2011-06-15 trunk 32096) [x86_64-freebsd8.2]
Backport:
[ruby-dev:43816]

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 に変更されるべき。報告の雰囲気からしてなるせさんは自分で直すつもりだと勝手にみなしてなるせさんにアサインします

Actions #5

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.
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0