【问题标题】:Ruby class << Klass = Module::newRuby 类 << 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 的实际作用)吗?

【问题讨论】:

    标签: ruby metaprogramming idioms eigenclass


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2020-10-18
      • 1970-01-01
      相关资源
      最近更新 更多