带名称空间/子模块的自动加载

Aar*_*ken 7 ruby autoload

我在ruby中使用模块作为命名空间.我将如何进行自动加载...类似的东西autoload :"App::ModuleA", 'app/module_a不会引发"必须是常量名称"错误?

Mar*_*une 11

你需要传递一个符号autoload(可能是问题中的拼写错误),并在常量的父级上调用它,如:

App.autoload :ModuleA, "app/module_a"
Run Code Online (Sandbox Code Playgroud)

请注意,这也适用于嵌套级别.说app/module_a你有:

module App::ModuleA
  autoload :Inner, "path/to/inner"
end
Run Code Online (Sandbox Code Playgroud)

当Ruby遇到时App::ModuleA::Inner,它将首先尝试访问ModuleA,通过自动加载成功,然后才尝试Inner,这也成功,因为它现在知道在哪里自动加载它.