Имея следующий модуль:
module Foo end
Как мы можем добавить внутрь этого модуля Foo другой модуль из его имени (например, с: name = 'Bar')?
Foo
name = 'Bar'
Я быхотел бы динамически получить это:
module Foo module Bar end end
Без (уродливой) строки eval:
module Foo end bar = Module.new Foo.const_set(:Bar, bar)
Это довольно просто:
module Foo end name = 'Bar' Foo.class_eval <<RUBY module #{name} end RUBY puts Foo::Bar # >> Foo::Bar
Вы просто напишите это:
# In some part of your codebase: module Foo end # Extension: module Foo module Bar end end