Project

General

Profile

Actions

Bug #6396

closed

instance_eval内での変数の扱いについて

Added by uy (西行寺 うゆ) over 10 years ago. Updated over 10 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Backport:
[ruby-dev:45611]

Description

=begin
class O
attr_accessor :x
end
o = O.new

o.x = 99

o.instance_eval do
p x #=> 99
if nil
x = 2 # この記述があるとxがnilになる
end
p x #=> nil
end

これはバグでしょうか?

o.instance_eval do
p x #=> 99
p x += 1
end
((|x|))は値を見ることは出来ても、
値を変更しようとしたり、
(({if}))分岐を通らなくても、そういったコードを混ぜておくと
((|x|))が(({nil}))(新しい変数?)に置き換わっているようですが
=end

Actions #1

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Description updated (diff)

=begin
一度 x への代入が現れれば、そのスコープではそこ以降では x というローカル変数が定義されていることになります。

これは構文解釈時に行われる判断なので、実際に代入されるかどうかは無関係です。

o.x へ代入したいのであれば、
o.x = 2

self.x = 2
としてください。
=end

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Status changed from Open to Rejected
Actions

Also available in: Atom PDF