0
は、誰もが、なぜそれが機能していない、私を言うことができます:私は間違って何をやってるさinstance_evalはatt_accessorで動作しませんか?
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
?
は、誰もが、なぜそれが機能していない、私を言うことができます:私は間違って何をやってるさinstance_evalはatt_accessorで動作しませんか?
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
?
犯人はこのコードの一部である:b = 2
は、インスタンスのコンテキストで評価されているが
a.instance_eval do
b = 2
end
、それはセッターを呼び出すことはありません。代わりに、現在のスコープにb
という新しいローカル変数を作成するだけです。設定者に連絡するには、あいまいさを解消するためにコードをさらに明確にする必要があります。
a.instance_eval do
self.b = 2
end
変更:
a.instance_eval do
self.b = 2
end