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
,然后通过<<
打开其特征类。
它正在覆盖PushableModule
的构造函数。由于new
应该定义为PushableModule.new
,而不是作为实例方法,所以定义在eigenclass里面。
通常你不会覆盖new
,而是定义一个实例方法initialize
,但是在某些特殊场合,new
的构造函数可以被重写。
【讨论】:
以上是关于Ruby 类 << Klass = Module::new的主要内容,如果未能解决你的问题,请参考以下文章