0
Я пытаюсь создать пользовательский attr_accessor, но, похоже, не может заставить его работать. Вместо того, чтобы возвращать значение, присвоенное писателю, оно возвращает переменную экземпляра. Есть идеи?Проблемы с отправкой и define_method
class Object
def custom_attr_accessor(klass, attribute)
ivar = "@#{attribute}".to_sym
writer_body = lambda { |arg| instance_variable_set(ivar, arg) }
reader_body = lambda { ivar }
klass.send(:define_method, "#{attribute}=".to_sym, &writer_body)
klass.send(:define_method, "#{attribute}".to_sym, &reader_body)
end
end
class Person
end
custom_attr_accessor(Person, :age)
me = Person.new
me.age = 100
puts me.age
=> @age
Интересно. Я не знал о получении партнера. Я все еще смущен, почему переменная экземпляра не возвращается при вызове метода getter после его установки с помощью метода записи? Спасибо за примечание об определении custom_attr_accessor, но я просто что-то тестирую. На практике я установлю себя, вызвав его из текущего объекта. – Nathan
'ivar' содержит имя вашей переменной экземпляра, а не значение самой переменной. Поэтому возвращается строка имени переменной. –
Не следует ли оценивать эту переменную экземпляра при вызове метода? – Nathan