如何在单个语句中要求多个模块?

Rei*_*nte 1 lua module packages wildcard require

我想一次需要几个 Lua 模块,类似于 Java ( import java.awt.*) 中的星号标志。这是我在子目录中组织模块的结构:

<myapp>
 -- calculations
    -- calc1
    -- calc2
    -- calc3
 -- helper
     -- help1
     -- help2
     -- print
          --graphprinter
          --matrixprinter
Run Code Online (Sandbox Code Playgroud)

我的客户需要一个子路径的每个模块:

 local graphprinter = require("myapp.helper.print.graphprinter")
 local matrixprinter = require("myapp.helper.print.matrixprinter")
Run Code Online (Sandbox Code Playgroud)

我更喜欢自动多需求,它从模块路径派生本地表名,并且一次需要整个子路径。这可能是格式:require("myapp.helper.print.*"). 应该为子目录的每个模块自动创建本地表名,这样就没有任何区别,因为我会逐个模块地要求它们。

Dar*_*yer 5

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

例如,在计算中,您编写的文件包含

return {
  calc1 = require "calc1";
  calc2 = require "calc2";
  calc3 = require "calc3";
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以写了calculations = require "calculations",它会自动加载calculations.calc<1-3>

这可以为整个目录结构完成,并且require "helper"可以调用require "help1"它依次调用require "print",最后你可以在helper.help1.print.<function>

其工作原理的简短说明:当您运行require "library"lua 时,将尝试包含一个名为library.lua的文件或init.lua位于library目录中的文件。这也是你为什么做require "dir.lib"而不是require "dir/lib";的原因。因为,如果做得对,当您只是require "dir"返回一个包含该字段的表时,lib您可以将其作为dir.lib.<function>.