attr_accessor 的实现原理,术语叫类宏。
module MyAttr
def my_reader(attr_name)
define_method(attr_name) do
instance_variable_get("@"+attr_name.to_s)
end
end
end
class Person
extend MyAttr
my_reader :name
def initialize(name)
@name = name
end
end
person = Person.new("Mortimer")
p person.name
#=> "Mortimer"
原文来自本周的 rubyweekly 推荐。