Ruby:class << self 做啥? [复制]

Posted

技术标签:

【中文标题】Ruby:class << self 做啥? [复制]【英文标题】: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 中重复现有问题。 【参考方案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 上的类方法。

【讨论】:

以上是关于Ruby:class << self 做啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby中'self.method_name'和'class << self'之间的区别

ruby中的类<< self是啥[重复]

Ruby 元类疯狂

Ruby - 在 ruby​​ 类的元类中定义 self 方法

ruby module里的self

Ruby类问题[重复]