2013-07-10 72 views
2

我在代码片段中使用了以下语法,我不确定它的功能。Ruby class << Klass = Module :: new

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

首先,类或模块PushableModule不会在文件/程序存在,其次这似乎是发生的是,我检索了eigenclass然后定义之前设置它等于Module::new一块,我只是不明白。有人可以向我解释这个(以及代码片段的实际内容)吗?

回答

3

您正在考虑运算符的优先顺序错误。这意味着

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

它通过Module::new创建一个模块,然后将其命名为PushableModule,然后通过<<打开其eigenclass。

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

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

+0

+1谢谢!现在它变得更有意义。 – DesAdams

相关问题