автозагрузка с пространствами имен / подмодулями - PullRequest
7 голосов
/ 02 июня 2010

Я использую модули как пространства имен в ruby. Как бы я пошел на автозагрузку ... что-то вроде autoload :"App::ModuleA", 'app/module_a, который не выбрасывает ошибку «должно быть постоянное имя»?

1 Ответ

11 голосов
/ 02 июня 2010

Вам нужно передать символ в autoload (возможно, опечатку в вашем вопросе) и вызвать его в родительской константе, например:

App.autoload :ModuleA, "app/module_a"

Обратите внимание, что это работает и для вложенных уровней. Скажите, что в app/module_a у вас есть:

module App::ModuleA
  autoload :Inner, "path/to/inner"
end

Когда Ruby встречает App::ModuleA::Inner, он сначала попытается получить доступ к ModuleA, удастся автоматически загрузить его, и только затем попытается Inner, что также успешно, потому что теперь он знает, куда его загружать.

...