我在代码段中使用了以下语法,但我不确定它是做什么的。
class << PushableModule = Module::new
def new *args, &blk
m = Module::new( *args, &blk )
m.extend Pushable
m
end
end
首先,文件/程序中不存在类或模块PushableModule
,其次似乎正在发生的是我正在检索其本征类,然后将其设置为{{1}在定义块之前,我只是不明白。有人可以向我解释一下(以及代码片实际上做了什么)?
答案 0 :(得分:3)
您认为运营商优先顺序错误。这意味着
class << (PushableModule = Module::new)
...
end
它按Module::new
创建一个模块,然后将其命名为PushableModule
,然后按<<
打开其本征类。
它覆盖了PushableModule
的构造函数。由于new
应该定义为PushableModule.new
,而不是实例方法,因此定义是在特征类中完成的。
通常,您不会覆盖new
,而是定义实例方法initialize
,但在某些特殊情况下,可以重写new
构造函数。