Ruby类<< Klass = Module :: new

时间:2013-07-10 03:08:00

标签: ruby metaprogramming idioms eigenclass

我在代码段中使用了以下语法,但我不确定它是做什么的。

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

首先,文件/程序中不存在类或模块PushableModule,其次似乎正在发生的是我正在检索其本征类,然后将其设置为{{1}在定义块之前,我只是不明白。有人可以向我解释一下(以及代码片实际上做了什么)?

1 个答案:

答案 0 :(得分:3)

您认为运营商优先顺序错误。这意味着

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

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

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

通常,您不会覆盖new,而是定义实例方法initialize,但在某些特殊情况下,可以重写new构造函数。