From: Nobuhiro IMAI Date: 2012-05-03T21:08:44+09:00 Subject: [ruby-dev:45612] Re: [ruby-trunk - Bug #6396][Open] instance_eval内での変数の扱いについて いまいです。 From: uy (西行寺 うゆ) Date: Thu, 3 May 2012 20:39:09 +0900 > o.instance_eval do > p x #=> 99 > if nil > x = 2 # この記述があるとxがnilになる > end > p x #=> nil > end > > > これはバグでしょうか? (最初の) x はメソッド呼び出しなので、以下でも再現します。 def x 99 end p x # => 99 if nil x = 2 end p x # => nil 上の p x の x はメソッド呼び出しですが、実行されなくても x = 2 の行を通 過すると x は(初期化されていない)ローカル変数になってしまうので、下の p x の x はローカル変数になっています。 元のコードだと、以下のように self を明示すると 99 が見えますね。 o.instance_eval do p x # => 99 if nil x = 2 end p self.x # => 99 end -- Nobuhiro IMAI Key fingerprint = E57F 2482 4074 13BC 3B9A 165B C689 5B16 A620 4657