之间的用法有区别吗
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上是否有类方法与是否需要创建该对象的实例无关。