Ruby 类 << Klass = Module::new

Posted

技术标签:

【中文标题】Ruby 类 << Klass = Module::new【英文标题】:Ruby class << Klass = Module::new 【发布时间】:2013-07-07 20:43:22 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您错误地使用了运算符优先级。这意味着

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

它通过Module::new创建一个模块,然后将其命名为PushableModule,然后通过&lt;&lt;打开其特征类。

它正在覆盖PushableModule 的构造函数。由于new应该定义为PushableModule.new,而不是作为实例方法,所以定义在eigenclass里面。

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

【讨论】:

以上是关于Ruby 类 << Klass = Module::new的主要内容,如果未能解决你的问题,请参考以下文章

为啥当“?扩展 Klass”被允许时,泛型被认为是不变的?

Ruby类问题[重复]

Handler源码

Handler源码

Handler源码

在 ruby​​ 中创建匿名类