Ruby: What does class << self do?
1 2 3 4 5 6 7
| class Person
class << self
def species
"Homo Sapien"
end
end
end |
为什么我需要使用类<< self?
有什么好处?
我为什么需要它?
-
请停止在Stack Overflow中询问重复的现有问题。
class << obj允许您访问obj的元类(也称为eigenclass或singleton类),该构造中的所有内容都在该元类的上下文中执行。 self直接在类定义中引用该类,因此在您的示例中,方法species被定义为Person上的类方法。
在class << self中声明的任何方法都将在类实例上定义,而不是在类的实例上定义。 在上面的示例中,您将能够调用Person.species但不能调用Person.new.species。
-
它是否像静态方法?
-
@newcomer,是的,就像PHP / Java中的静态方法一样。
-
您也可以编写def self.species,因为self指的是类定义中的类实例。
-
你也可以写def Person.species,ruby为你提供了很多选项。 就个人而言,我更喜欢使用def self.species,因为很明显species是一个类方法而不必滚动,除非所有方法都是类方法,而不是我更喜欢class << self。