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



我以前在代码中看到过这一点,我刚刚在David A.Black的The Well Grounded Rubister中读到过,但没有用例示例可以帮助我理解为什么有人想在这样的类上定义一个单例方法:

class Vehicle
    class << self
        def all_makes
            # some code here
        end
    end
end

类上的上述singleton方法与通常的类方法(如)有何不同

class Vehicle
    def self.all_makes
        # some code here
    end
end

Yehuda Katz出色地记录了这些差异(以及其他方面)。你可以在这里找到。

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

最新更新