在 class 定义的方法名称中显式使用 `self`
Explicit use of `self` in method name in class definition
此代码来自 Rails 速成课程书籍:
class Accessor
def self.accessor(attr)
class_eval "
def #{attr}
@#{attr}
end
def #{attr}=(val)
@#{attr} = val
end
"
end
end
想法是 Accessor
的子类可以通过使用我们希望生成的属性名称调用 accessor
方法来创建 getter 和 setter 方法getter 和 setter 方法:
class Element < Accessor
accessor :name
...
但是,为什么在 def self.accessor(attr)
中使用 self
?
因为你想为 a class 的所有实例定义访问器;您不想为某些实例定义它们而不想为其他实例定义它们。因此,定义访问器是你想针对 class 而不是实例做的事情;因此 accessor
必须是 class 方法,而不是实例方法。使用时会在class正文中调用。
此代码来自 Rails 速成课程书籍:
class Accessor
def self.accessor(attr)
class_eval "
def #{attr}
@#{attr}
end
def #{attr}=(val)
@#{attr} = val
end
"
end
end
想法是 Accessor
的子类可以通过使用我们希望生成的属性名称调用 accessor
方法来创建 getter 和 setter 方法getter 和 setter 方法:
class Element < Accessor
accessor :name
...
但是,为什么在 def self.accessor(attr)
中使用 self
?
因为你想为 a class 的所有实例定义访问器;您不想为某些实例定义它们而不想为其他实例定义它们。因此,定义访问器是你想针对 class 而不是实例做的事情;因此 accessor
必须是 class 方法,而不是实例方法。使用时会在class正文中调用。