如何使用Lua require()函数在实际地址之前访问模块?

时间:2016-09-08 04:22:29

标签: lua require

例: 我在一个名为'tuna'的文件夹中,想要一个'tuna'之前的文件:

Ex:require "some-file.lua/tuna" 但我不知道怎么做。

1 个答案:

答案 0 :(得分:3)

您应该了解Lua在需要时如何搜索文件。

package.path是一个字符串,用于确定搜索所需文件的位置和方式。通常看起来像这样:

"/some/path/?.lua; /some/other/path/?.lua; ?.lua;"

当您调用require("module")时,Lua会获取package.path中字符串中包含的第一个路径(路径以分号分隔,因此第一个路径为/some/path/?.lua),并替换字符串中的?,其中包含传递给require的字符串。

所以Lua首先会在/some/path/module.lua搜索您的模块。

如果找到该文件,则执行该文件,否则将继续执行下一条路径:它将在/some/other/path/module.lua处搜索,最后在module.lua搜索。

现在,如果您的目录如下所示:

Outer_dir = {
    tuna = {
        main.lua,
        tuna.lua
    },
    module.lua
} --didn't know how to represent a tree lol

而且,如果您从main.lua通常只需输入require("tuna")来访问tuna.lua,那么您的package.path必须与/Outer_dir/tuna/?.lua类似。为了确保你可以要求module.lua,这是“之前”tuna.lua,你应该将你的package.path字符串更改为/Outer_dir/?.lua(这意味着你应该使用require("tuna/tuna") to access tuna.lua) or to / Outer_dir / tuna /?。lua; / Outer_dir /?。lua so that either require(“tuna”)and require(“module”)`将完美运作。