类中的类定义<<<<自己呢?

时间:2015-11-30 08:57:42

标签: ruby

我知道如何添加类方法和类行为using self << class (eigenclass)。但是,在阅读some source code时,我看到了另一种用途:

class LetterAvatar
  class << self
    class Identity
    end
  end
end

这是如何工作的?它应该做什么以及什么时候应该使用它?什么是(可能更被认可的)替代方式来写这个?

1 个答案:

答案 0 :(得分:3)

我认为他们这样做是因为他们在其他任何地方都不需要这个课程。

如果不打开单例类,流程将如下所示(假设原始代码中元类中定义的每个方法都以self.为前缀):

他们可以将Identity定义为

class LetterAvatar
  class Identity
  end
end

然后使用self.generate方法中的类,如下所示:

class LetterAvatar
  # code omitted
  def self.generate
    identity = LetterAvatar::Identity.from_username(username)
    # code omitted
  end
  # other class level methods defined with `self.`
end

但是为什么在单例类(Identity)中实际使用generate类(并且不需要在其他任何地方访问)时这样做呢?

解决方案是IMO非常优雅,之前没有见过这样的事情。