使用类<< self,何时使用类或模块?

And*_*rio 7 ruby module class self

两者之间的使用是否存在差异

class Helper
  class << self
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

module Helper
  class << self
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

你什么时候用一个而不是另一个?

Phr*_*ogz 5

class<<self似乎是一个红色的鲱鱼,因为这里唯一的区别是一类与模块。也许您在问“我想创建一个我不打算实例化的对象,而该对象仅作为某些方法的名称空间存在(并且可能作为具有其自身全局状态的单例对象存在)。”

在这种情况下,两者将同样发挥作用。如果您有可能想要创建一个派生类(另一个继承相同方法的对象),则应该使用一个类,因为它的编写稍微容易一些:

class Variation < Helper
Run Code Online (Sandbox Code Playgroud)

代替

module Helper
  module OwnMethods
    # Put methods here instead of class << self
  end
  extend OwnMethods
end

module Variation
  extend Helper::OwnMethods
Run Code Online (Sandbox Code Playgroud)

但是,仅仅为了命名空间,我通常会在类上使用模块,因为类暗示将发生实例化。