用法上有区别吗
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
但是,对于命名空间,我通常会在类上使用模块,因为类意味着将发生实例化。
模块和类之间的区别在于您可以创建类的实例,但不能创建模块。如果您需要创建 Helper 的实例 (h = Helper.new),那么它应该是一个类。如果没有,最好保留一个模块。我不确定您的其余代码与该问题有何关联;您是否在 Module 或 Class 上有类方法与您是否需要创建该对象的实例无关。