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
有趣。我不知道得到的對手。我仍然困惑爲什麼實例變量在通過writer方法設置後調用getter方法時未返回?感謝關於定義custom_attr_accessor的注意事項,但我只是在測試一些東西。在實踐中,我會通過從當前對象中調用它來設置自己。 – Nathan
'ivar'包含您的實例變量的名稱,而不是變量本身的值。因此返回變量名稱的字符串。 –
調用方法時不應評估該實例變量嗎? – Nathan