Ruby:class << self 做啥? [复制]
Posted
技术标签:
【中文标题】Ruby:class << self 做啥? [复制]【英文标题】:Ruby: What does class << self do? [duplicate]Ruby:class << self 做什么? [复制] 【发布时间】:2011-10-12 11:41:14 【问题描述】:class Person
class << self
def species
"Homo Sapien"
end
end
end
为什么我需要使用类
有什么好处? 为什么我需要它?
【问题讨论】:
请停止在 Stack Overflow 中重复现有问题。 【参考方案1】:在class << self
中声明的任何方法都将定义在类实例上,而不是类的实例上。在上面的例子中,你可以调用Person.species
,但不能调用Person.new.species
。
【讨论】:
@newcomer,是的,就像 php/Java 中的静态方法。 也可以写成def self.species
,因为self
指的是类定义中的类实例。
你也可以写def Person.species
,如你所见,ruby 为你提供了很多选择。就个人而言,我更喜欢使用def self.species
,因为很明显species
是一个无需滚动的类方法,除非 所有这些方法确实是类方法,并且比我更喜欢class << self
。【参考方案2】:
class << obj
让您可以访问obj
的元类(也称为特征类或单例类),该构造中的所有内容都在该元类的上下文中执行。 self
直接在类定义中引用该类,因此在您的示例中,方法 species
被定义为 Person
上的类方法。
【讨论】:
以上是关于Ruby:class << self 做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Ruby中'self.method_name'和'class << self'之间的区别