【发布时间】:2010-06-02 17:22:10
【问题描述】:
我在 ruby 中使用模块作为命名空间。我将如何进行自动加载...像autoload :"App::ModuleA", 'app/module_a 这样不会引发“必须是常量名称”错误的东西?
【问题讨论】:
我在 ruby 中使用模块作为命名空间。我将如何进行自动加载...像autoload :"App::ModuleA", 'app/module_a 这样不会引发“必须是常量名称”错误的东西?
【问题讨论】:
您需要将符号传递给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,这也是因为它现在知道在哪里自动加载它。
【讨论】:
include App::ModuleA 时调用它
App.autoload,而不仅仅是autoload。试试看,它会如你所愿。