7

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

4

1 回答 1

11

您需要将符号传递给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,这也成功了,因为它现在知道在哪里自动加载它。

于 2010-06-02T18:53:42.883 回答