如何使用单个语句要求多个模块?

我想一次性要求几个Lua模块,类似于Java的星号符号(import java.awt.*)。这是我组织模块的结构:

<myapp>
 -- calculations
    -- calc1
    -- calc2
    -- calc3
 -- helper
     -- help1
     -- help2
     -- print
          --graphprinter
          --matrixprinter

我的客户端要求每个子路径的每个模块:

 local graphprinter = require("myapp.helper.print.graphprinter")
 local matrixprinter = require("myapp.helper.print.matrixprinter")

我希望有一个自动的多要求,根据模块路径派生本地表名,并一次性要求整个子路径。这可能是格式:require("myapp.helper.print.*")。自动为子目录中的每个模块创建本地表名称,以便与逐个模块要求它们时没有任何区别。

点赞
用户4984564
用户4984564

为什么不为每个需要所有其他库的文件夹编写一个 init.lua 文件呢?

例如,在 calculations 中,您编写一个包含以下内容的文件

return {
  calc1 = require "calc1";
  calc2 = require "calc2";
  calc3 = require "calc3";
}

然后,您只需编写 calculations = require "calculations",它将自动加载 calculations.calc<1-3>

这可以对整个目录结构进行操作,require "helper" 可以调用 require "help1",后者进而调用 require "print",最后可以在 helper.help1.print.<function> 中找到您的函数

简要说明它的工作原理:当您运行 require "library" 时,Lua 将尝试包含一个名为 library.lua 的文件或位于 library 目录中的文件 init.lua。这也是为什么您要执行 require "dir.lib" 而不是 require "dir/lib" 的原因;因为如果做得正确,当您只需 require "dir" 时,它将返回包含字段 lib 的表,因此可以通过 dir.lib.<function> 访问它。

2016-11-10 15:14:27