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

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

例:require "some-file.lua/tuna" 但我不知道该如何实现。

点赞
用户6245072
用户6245072

你应该学习 Lua 在 require 时如何搜索文件。

package.path 是一个字符串,它确定了在哪里和如何搜索你所需的文件。通常它看起来像这样:

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

当你调用 require("module") 时,Lua 取出字符串中的第一个路径(路径用分号隔开,所以第一个路径将是 /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
} --没想到该怎么表示一棵树 lol

而且,如果你通常从 main.lua 中通过 require("tuna") 访问 tuna.lua,那么你的 package.path 必须是 /Outer_dir/tuna/?.lua。为了确保可以 require module.lua,它位于 tuna.lua 之前,你应该将 package.path 字符串更改为 /Outer_dir/?.lua(这意味着你应该使用 require ("tuna/tuna") 访问 tuna.lua),或者更改为 /Outer\_dir/tuna/?.lua; /Outer\_dir/?.lua,这样 require("tuna")require("module") 都可以完美地工作。

2016-09-08 08:13:58