0

誰かが私に言うことができます、なぜそれが機能しないのですか?

class A
  attr_accessor :b
end

a = A.new
a.instance_eval do
  b = 2
end

a.b
=> nil

私がしているのは何が悪いのですか?

4

2 に答える 2

6

犯人はコードのこの部分にあります:

a.instance_eval do
  b = 2
end

インスタンスのコンテキストで評価されますがb = 2、セッターは呼び出されません。b代わりに、現在のスコープで呼び出される新しいローカル変数を作成するだけです。セッターを呼び出すには、あいまいさを解決するためにコードをさらに明確にする必要があります。

a.instance_eval do
  self.b = 2
end
于 2012-03-25T11:47:28.740 に答える
0

変化する:

a.instance_eval do
  self.b = 2
end
于 2012-03-25T11:47:07.233 に答える