我在数组中有一些模块。所有模块都定义了一个名为“process”的方法,我想按顺序调用这些方法中的每一个。我看到的代码看起来像这样(假设模块都在Mod类中定义):
modules.each do |mod|
extend Mod.const_get(mod)
process(data)
end
这是第一次正常工作,但是在第一次循环后,该方法不会被覆盖。我已尝试将undef process
添加为each
块中的最后一行,但这不起作用。
我有什么方法可以做到这一点吗?
答案 0 :(得分:2)
将'process'方法变成一个模块方法一个选项(通过定义def self.process)?
如果是这样,将方法'process'直接发送到返回的常量将起作用:
modules.each do |mod|
Mod.const_get(mod).send(:process, data)
end
修改强> 想一想,为什么不直接调用这个方法?
Mod.const_get(mod).process(data)
答案 1 :(得分:2)
模块只能包含在继承链中一次。
另外,你在做什么真的很奇怪,你应该考虑重新设计你的系统。