автозагрузка с пространствами имен/подмодулями

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

7
задан Aaron Yodaiken 2 June 2010 в 22:47
поделиться

1 ответ

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

App.autoload :ModuleA, "app/module_a"

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

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

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

11
ответ дан 6 December 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: