使用类<<自己,什么时候使用类或模块?



之间的用法有区别吗

class Helper
  class << self
    # ...
  end
end

module Helper
  class << self
    # ...
  end
end

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

class<<self似乎是在转移注意力,因为这里唯一的区别是类和模块。也许你在问"我想创建一个我不想实例化的对象,但它只作为某些方法的命名空间存在(可能是作为一个具有自己的全局状态的单例存在)。"

如果是这样的话,两者都将同样发挥作用。如果你可能想创建一个派生(另一个继承相同方法的对象),那么你应该使用一个类,因为它更容易写:

class Variation < Helper

而不是

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

然而,对于命名空间,我通常会在类上使用模块,因为类意味着将发生实例化。

Module和class的区别在于,您可以创建class的实例,但不能创建Module。如果您需要创建Helper的实例(h=Helper.new),那么它应该是一个类。如果没有,那么最好保留为一个模块。我不确定您的代码的其余部分与该问题有何关联;在Module或class上是否有类方法与是否需要创建该对象的实例无关。

相关内容

最新更新