之间的使用是否存在差异
class Helper
class << self
# ...
end
end
和
module Helper
class << self
# ...
end
end
你什么时候用一个而不是另一个?
答案 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上有类方法与是否需要创建该对象的实例无关。