Ruby 在类定义的方法名中显式使用'self'
此代码来自Rails速成课程手册:Ruby 在类定义的方法名中显式使用'self',ruby,self,class-eval,Ruby,Self,Class Eval,此代码来自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方法,方法的
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
...
class元素
但是,为什么要在
def self.accessor(attr)
中使用self
?,因为要为类的所有实例定义访问器;您不希望为某些实例定义它们,也不希望为其他实例定义它们。因此,定义访问器是要针对类而不是实例执行的操作;因此,accessor
必须是类方法,而不是实例方法。使用时将在类正文中调用它。因为您要为类的所有实例定义访问器;您不希望为某些实例定义它们,也不希望为其他实例定义它们。因此,定义访问器是要针对类而不是实例执行的操作;因此,accessor
必须是类方法,而不是实例方法。使用时将在类正文中调用它。因为您要为类的所有实例定义访问器;您不希望为某些实例定义它们,也不希望为其他实例定义它们。因此,定义访问器是要针对类而不是实例执行的操作;因此,accessor
必须是类方法,而不是实例方法。使用时将在类正文中调用它。因为您要为类的所有实例定义访问器;您不希望为某些实例定义它们,也不希望为其他实例定义它们。因此,定义访问器是要针对类而不是实例执行的操作;因此,accessor
必须是类方法,而不是实例方法。使用时将在类主体中调用它。确实如此!我来自Java和python,我忘记了定义类方法的语法。谢谢你,真的!我来自Java和python,我忘记了定义类方法的语法。谢谢你,真的!我来自Java和python,我忘记了定义类方法的语法。谢谢你,真的!我来自Java和python,我忘记了定义类方法的语法。非常感谢。