在模块内定义模块

时间:2012-04-01 12:20:22

标签: ruby metaprogramming

拥有以下模块:

module Foo
end

我们如何在这个Foo模块中添加另一个模块的名称(例如:name = 'Bar')?

我想动态地得到这个:

module Foo
  module Bar
  end
end

3 个答案:

答案 0 :(得分:4)

没有(丑陋的)字符串评估:

module Foo
end

bar = Module.new
Foo.const_set(:Bar, bar)

答案 1 :(得分:1)

这很简单:

module Foo
end

name = 'Bar'

Foo.class_eval <<RUBY
  module #{name}
  end
RUBY

puts Foo::Bar
# >> Foo::Bar

答案 2 :(得分:-2)

你只需写下来:

# In some part of your codebase:
module Foo
end

# Extension:
module Foo
  module Bar
  end
end
相关问题