В Ruby я могу вкладывать модули/классы в другие модули/классы. Я хочу добавить некоторое объявление внутри файла или класса, чтобы иметь возможность ссылаться на вложенные классы по их коротким именам, например. использовать Inner
для получения Outer::Inner
, как в Java, C #и т. д. Синтаксис может быть таким:
module Outer
class Inner; end
class AnotherInner; end
end
class C
import Outer: [:Inner, :AnotherInner]
def f
Inner
end
end
Упрощенная реализация может быть такой:
class Class
def import(constants)
@imported_constants =
(@imported_constants || {}).merge Hash[
constants.flat_map { |namespace, names|
[*names].map { |name| [name.to_sym, "#{namespace}::#{name}"] }
}]
end
def const_missing(name)
const_set name, eval(@imported_constants[name] || raise)
end
end
Есть ли надежная реализация в Rails или какой-нибудь гем, который делает аналогичный импорт, но при этом совместим с механизмом автоматической загрузки -Rails?