你如何在ruby中重载动态扩展方法?

时间:2010-02-06 03:55:39

标签: ruby metaprogramming

我在数组中有一些模块。所有模块都定义了一个名为“process”的方法,我想按顺序调用这些方法中的每一个。我看到的代码看起来像这样(假设模块都在Mod类中定义):

modules.each do |mod|
  extend Mod.const_get(mod)
  process(data)
end

这是第一次正常工作,但是在第一次循环后,该方法不会被覆盖。我已尝试将undef process添加为each块中的最后一行,但这不起作用。

我有什么方法可以做到这一点吗?

2 个答案:

答案 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)

模块只能包含在继承链中一次。

另外,你在做什么真的很奇怪,你应该考虑重新设计你的系统。