使用命名空间/子模块自动加载
我在 ruby 中使用模块作为命名空间。我将如何进行自动加载......像 autoload :"App::ModuleA", 'app/module_a
这样的东西不会抛出“必须是常量名称”错误?
I'm using modules as namespaces in ruby. How would I go about autoloading...something like autoload :"App::ModuleA", 'app/module_a
that doesn't throw a "must be constant name" error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要将一个符号传递给 autoload (可能是问题中的拼写错误),并在常量的父级上调用它,例如:
请注意,这也适用于嵌套级别。假设在
app/module_a
中你有:当 Ruby 遇到
App::ModuleA::Inner
时,它会首先尝试访问ModuleA
,成功通过自动加载它,然后才尝试Inner
,它会成功,因为它现在知道在哪里自动加载它。You need to pass a symbol to
autoload
(probably a typo in your question), and call it on the parent of the constant, like:Note that this works for nested levels too. Say that in
app/module_a
you have:When Ruby encounters
App::ModuleA::Inner
, it will first attempt to accessModuleA
, succeed by autoloading it, and only then attemptInner
, which succeeds also because it now knows where to autoload it.