And*_*rio 7 ruby module class self
两者之间的使用是否存在差异
class Helper
class << self
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
和
module Helper
class << self
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
你什么时候用一个而不是另一个?
在class<<self似乎是一个红色的鲱鱼,因为这里唯一的区别是一类与模块。也许您在问“我想创建一个我不打算实例化的对象,而该对象仅作为某些方法的名称空间存在(并且可能作为具有其自身全局状态的单例对象存在)。”
在这种情况下,两者将同样发挥作用。如果您有可能想要创建一个派生类(另一个继承相同方法的对象),则应该使用一个类,因为它的编写稍微容易一些:
class Variation < Helper
Run Code Online (Sandbox Code Playgroud)
代替
module Helper
module OwnMethods
# Put methods here instead of class << self
end
extend OwnMethods
end
module Variation
extend Helper::OwnMethods
Run Code Online (Sandbox Code Playgroud)
但是,仅仅为了命名空间,我通常会在类上使用模块,因为类暗示将发生实例化。