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