Определить модуль внутри модуля - PullRequest
0 голосов
/ 01 апреля 2012

Имея следующий модуль:

module Foo
end

Как мы можем добавить внутрь этого модуля Foo другой модуль из его имени (например, с: name = 'Bar')?

Я быхотел бы динамически получить это:

module Foo
  module Bar
  end
end

Ответы [ 3 ]

4 голосов
/ 01 апреля 2012

Без (уродливой) строки eval:

module Foo
end

bar = Module.new
Foo.const_set(:Bar, bar)
1 голос
/ 01 апреля 2012

Это довольно просто:

module Foo
end

name = 'Bar'

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

puts Foo::Bar
# >> Foo::Bar
0 голосов
/ 01 апреля 2012

Вы просто напишите это:

# In some part of your codebase:
module Foo
end

# Extension:
module Foo
  module Bar
  end
end
...