gpt4 book ai didi

Ruby 类 << Klass = Module::new

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:14 24 4
gpt4 key购买 nike

我在代码片段中遇到了以下语法,但我不确定它的作用。

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

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

最佳答案

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

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

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

它正在覆盖 PushableModule 的构造函数.自 new应定义为 PushableModule.new ,而不是作为实例方法,定义是在特征类中完成的。

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

关于Ruby 类 << Klass = Module::new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com