我知道如何添加类方法和类行为using self << class
(eigenclass)。但是,在阅读some source code时,我看到了另一种用途:
class LetterAvatar
class << self
class Identity
end
end
end
这是如何工作的?它应该做什么以及什么时候应该使用它?什么是(可能更被认可的)替代方式来写这个?
答案 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非常优雅,之前没有见过这样的事情。