动态地将类添加到Ruby中的模块

时间:2016-03-29 15:38:34

标签: ruby-on-rails ruby

假设我动态创建一个模块:

app = Object.const_set('CoolModule', Module.new)

有没有向该模块添加一个类?这样的事可能吗?

app << (class Application; end)

我基本上试图让以下内容

module 'CoolModule'.turnThisIntoAModule
  class Application < Rails::Application
    config.blabla = 2
  end
end

2 个答案:

答案 0 :(得分:2)

你只需重复同样的事情。

CoolModule.const_set("SomeVeryDynamicName", Module.new do
  class Application < Rails::Application
    config.blabla = 2
  end
end)

答案 1 :(得分:1)

您可以为动态命名的模块添加一个类,如下例所示:

app = Object.const_set('CoolModule', Module.new)

Object.const_get('CoolModule').
  const_set('Application', Class.new(Rails::Application) do
    config.blabla = 2
  end)

如果您可以在通话点访问app对象,那么它当然可以替换Object.const_get('CoolModule')表达式。

Module.module_eval建议自己,但遗憾的是它不会以块形式进行范围查找。它在字符串参数形式中执行,但我不鼓励在字符串上使用evals。