【问题标题】:In Ruby, what is the difference between a class method and a class's singleton method?在 Ruby 中,类方法和类的单例方法有什么区别?
【发布时间】:2014-10-08 14:27:52
【问题描述】:

我以前在代码中看到过这一点,我刚刚在 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

【问题讨论】:

标签: ruby singleton


【解决方案1】:

Yehuda Katz 对差异(除其他外)进行了出色的记录。你可以找到here

给你一个简短的总结。在定义类时,self 关键字指的是类本身。因此,当您执行self.method 时,您将在 Person 类上定义一个新方法。每个类都有一个元类,也称为单例类,可以访问和修改。对于class &lt;&lt; self,您正在打开单例类并修改该值。功能上,结果是一样的,但是被修改的类是不同的。

【讨论】:

  • 很好的解释,马克斯。一件小事。我经常看到“开课”这个表达,虽然我从来没有找到它的定义。说class &lt;&lt; self导致self变成单例类不是更准确吗?
  • “我经常看到“开课”这个说法,虽然我从来没有找到它的定义。” open a class 只是意味着做一些事情来修改类。
  • 之所以被称为“开课”,是因为class &lt;&lt; self和对应的end之间的所有东西都会修改类。因此,该类在class &lt;&lt; selfend 之间是“开放的”。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2012-10-21
  • 2012-09-07
  • 1970-01-01
相关资源
最近更新 更多