2

我在代码片段中有以下语法,但我不确定它的作用。

class << PushableModule = Module::new
 def new *args, &blk
   m = Module::new( *args, &blk )
   m.extend Pushable
   m
 end
end

首先,文件/程序中不存在类或模块PushableModule,其次似乎正在发生的是我正在检索它的特征类,然后Module::new在定义一个块之前将其设置为等于,我只是不理解。有人可以向我解释一下(以及代码片段的实际作用)吗?

4

1 回答 1

3

您错误地使用了运算符优先级。它的意思是

class << (PushableModule = Module::new)
  ...
end

它创建一个模块,然后将其Module::new命名为PushableModule,然后打开其特征类<<

它正在覆盖的构造函数PushableModule。由于new应该定义为PushableModule.new,而不是实例方法,因此定义是在特征类中完成的。

通常,你不会重写new,而是定义一个实例方法initialize,但在某些特殊场合,new可以重写构造函数。

于 2013-07-10T03:11:36.013 回答