instance_eval не работает с att_accessor? - PullRequest
0 голосов
/ 25 марта 2012

Кто-нибудь может мне сказать, почему это не работает:

class A
  attr_accessor :b
end

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

a.b
=> nil

Что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 25 марта 2012

Виновник лежит в этой части кода:

a.instance_eval do
  b = 2
end

Хотя b = 2 оценивается в контексте вашего экземпляра, он не вызывает сеттер. Вместо этого он просто создает новую локальную переменную с именем b в текущей области видимости. Чтобы позвонить сеттеру, вам необходимо уточнить код, чтобы устранить неоднозначность:

a.instance_eval do
  self.b = 2
end
0 голосов
/ 25 марта 2012

Изменение:

a.instance_eval do
  self.b = 2
end
...