代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken

使用命名空间/子模块自动加载

  •  7
  • Aaron Yodaiken  · 技术社区  · 14 年前

    我在Ruby中使用模块作为名称空间。我该怎么做自动加载……比如 autoload :"App::ModuleA", 'app/module_a 这不会引发“must be constant name”错误?

    1 回复  |  直到 12 年前
        1
  •  11
  •   Marc-André Lafortune    12 年前

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