【问题标题】:autoload with namespaces/submodules使用命名空间/子模块自动加载
【发布时间】:2010-06-02 17:22:10
【问题描述】:

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

【问题讨论】:

    标签: ruby autoload


    【解决方案1】:

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

    【讨论】:

    • 我明白这一点。但我不想初始化调用任何常量 ModuleA,我想在有人说 include App::ModuleA 时调用它
    • 确实,这就是为什么你想打电话给App.autoload,而不仅仅是autoload。试试看,它会如你所愿。
    • 如何与包含两个嵌套类的模块一起工作?
    猜你喜欢
    • 2016-07-01
    • 2011-11-19
    • 2013-11-25
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多