Actions
Bug #6396
closedinstance_eval内での変数の扱いについて
Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Backport:
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
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
- Description updated (diff)
=begin
一度 x への代入が現れれば、そのスコープではそこ以降では x というローカル変数が定義されていることになります。
これは構文解釈時に行われる判断なので、実際に代入されるかどうかは無関係です。
o.x へ代入したいのであれば、
o.x = 2
か
self.x = 2
としてください。
=end
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
- Status changed from Open to Rejected
Actions
Like0
Like0Like0