使用类<<自我,何时使用课程或模块?

时间:2012-04-05 22:43:28

标签: ruby class module self

之间的使用是否存在差异
class Helper
  class << self
    # ...
  end
end

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

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

2 个答案:

答案 0 :(得分:4)

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

如果是这种情况,两者都将起到同样的作用。如果您有可能想要创建衍生物(另一个继承相同方法的对象),那么您应该使用一个类,因为它稍微容易编写:

class Variation < Helper

而不是

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

module Variation
  extend Helper::OwnMethods

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

答案 1 :(得分:2)

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