我之前在代码中已经看过这个,我刚刚在David A. Black的The Well Grounded Rubyist中读过它,但没有用例的例子来帮助我理解为什么有人想要定义一个单例方法像这样的一个类:
class Vehicle
class << self
def all_makes
# some code here
end
end
end
上面的单例方法如何与通常的类方法不同,如下所示:
class Vehicle
def self.all_makes
# some code here
end
end
答案 0 :(得分:2)
耶胡达·卡茨(Yehuda Katz)对这些差异进行了精彩的撰写(除此之外)。你可以找到here。
为您提供简短摘要。在定义类时,self
关键字指的是类本身。因此,当您执行self.method
时,您将在Person类上定义一个新方法。每个类都有一个元类,也称为单例类,可以访问和修改。在class << self
的情况下,您将打开单例类并修改该值。在功能上,结果是相同的,但被修改的类是不同的。