【发布时间】:2017-01-15 21:23:53
【问题描述】:
例如: 我在一个名为“tuna”的文件夹中,想要一个位于“tuna”之前的文件:
例如:require "some-file.lua/tuna"
但我不知道该怎么做。
【问题讨论】:
-
文件before是什么意思?
-
表示在它所在的文件夹中。
-
你知道当你在 CMD 中输入 cd.. 吗?就是这样。
例如: 我在一个名为“tuna”的文件夹中,想要一个位于“tuna”之前的文件:
例如:require "some-file.lua/tuna"
但我不知道该怎么做。
【问题讨论】:
您应该了解 Lua 如何在需要时搜索文件。
package.path 是一个字符串,用于确定它应该在哪里以及如何搜索您需要的文件。它通常看起来像这样:
"/some/path/?.lua; /some/other/path/?.lua; ?.lua;"
当你调用require("module")时,Lua会取package.path中字符串中包含的第一个路径(路径用分号分隔,所以第一个路径是/some/path/?.lua),并替换了?中的? string 与传递给 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 访问 tuna.lua,只需键入 require("tuna"),那么您的 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/?.luaso that eitherrequire("tuna")andrequire("module")` 将完美运行。
【讨论】: