【问题标题】:Ruby: What does class << self do? [duplicate]Ruby:class << self 做什么? [复制]
【发布时间】:2011-10-12 11:41:14
【问题描述】:
class Person
  class << self
    def species
      "Homo Sapien"
    end
  end
end

为什么我需要使用类

有什么好处? 为什么我需要它?

【问题讨论】:

  • 请停止在 Stack Overflow 中重复现有问题。

标签: ruby


【解决方案1】:

class &lt;&lt; self 中声明的任何方法都将定义在类实例上,而不是类的实例上。在上面的例子中,你可以调用Person.species,但不能调用Person.new.species

【讨论】:

  • @newcomer,是的,就像 PHP/Java 中的静态方法。
  • 也可以写成def self.species,因为self指的是类定义中的类实例。
  • 你也可以写def Person.species,如你所见,ruby 为你提供了很多选择。就个人而言,我更喜欢使用def self.species,因为很明显species 是一个无需滚动的类方法,除非 所有这些方法确实是类方法,并且比我更喜欢class &lt;&lt; self
【解决方案2】:

class &lt;&lt; obj 让您可以访问obj 的元类(也称为特征类或单例类),该构造中的所有内容都在该元类的上下文中执行。 self 直接在类定义中引用该类,因此在您的示例中,方法 species 被定义为 Person 上的类方法。

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2022-12-08
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2020-04-16
    • 2016-11-29
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多