此代码来自Rails Crash Course书:
class Accessor
def self.accessor(attr)
class_eval "
def #{attr}
@#{attr}
end
def #{attr}=(val)
@#{attr} = val
end
"
end
end
我们的想法是Accessor
的子类可以通过使用我们希望生成getter和setter方法的属性名称调用accessor
方法来创建getter和setter方法:
class Element < Accessor
accessor :name
...
但是,为什么在self
使用def self.accessor(attr)
?
答案 0 :(得分:3)
因为你想为一个类的所有实例定义访问器;您不希望为某些实例定义它们,也不为其他实例定义它们。因此,定义访问器是你想对类而不是实例做的事情;因此accessor
必须是类方法,而不是实例方法。它将在使用时在类体中调用。