From: Tanaka Akira Date: 2004-09-06T18:01:28+09:00 Subject: [ruby-dev:24229] scope rule of class_eval "..." 疑問に思ったのですが、次のように class_eval に文字列を与えた場合に、レ シーバ A の中で定義された定数が参照できるのは意図されているのでしょう か? % ruby -ve ' class A Const = 1 end A.class_eval "p Const" ' ruby 1.9.0 (2004-09-06) [i686-linux] 1 次のように試してみると、class_eval に文字列を与えた時だけ、定数とクラ ス変数がレシーバの環境で評価される感じです。 % ruby <<'EE' class A Const = :A @ivar = :Ac @@cvar = :A def initialize @ivar = :Ai end end class B Const = :B @ivar = :Bc @@cvar = :B def initialize @ivar = :Bi end def test_i_i_b() A.new.instance_eval { p [Const, @ivar, @@cvar] } end def test_i_i_s() A.new.instance_eval " p [Const, @ivar, @@cvar] " end def test_c_i_b() A.instance_eval { p [Const, @ivar, @@cvar] } end def test_c_i_s() A.instance_eval " p [Const, @ivar, @@cvar] " end def test_c_c_b() A.class_eval { p [Const, @ivar, @@cvar] } end def test_c_c_s() A.class_eval " p [Const, @ivar, @@cvar] " end end B.new.test_i_i_b B.new.test_i_i_s B.new.test_c_i_b B.new.test_c_i_s B.new.test_c_c_b B.new.test_c_c_s EE [:B, :Ai, :B] [:B, :Ai, :B] [:B, :Ac, :B] [:B, :Ac, :B] [:B, :Ac, :B] [:A, :Ac, :A] -- [田中 哲][たなか あきら][Tanaka Akira]