在Ruby中,类方法和类的单例方法有什么区别?

时间:2014-10-08 14:27:52

标签: ruby singleton

我之前在代码中已经看过这个,我刚刚在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

1 个答案:

答案 0 :(得分:2)

耶胡达·卡茨(Yehuda Katz)对这些差异进行了精彩的撰写(除此之外)。你可以找到here

为您提供简短摘要。在定义类时,self关键字指的是类本身。因此,当您执行self.method时,您将在Person类上定义一个新方法。每个类都有一个元类,也称为单例类,可以访问和修改。在class << self的情况下,您将打开单例类并修改该值。在功能上,结果是相同的,但被修改的类是不同的。