Lua全局变量包含指向当前文件的路径?

在 Lua 中有一个全局变量包含正在解释的文件的路径吗?类似于 Python 的 __file__ 变量?

我在解释器中快速运行了 for k, v in pairs(_G) do print(k) end,以查找是否能找到任何信息。仅列出了以下变量:

string xpcall package tostring print os unpack require getfenv setmetatable next assert tonumber io rawequal collectgarbage getmetatable module rawset math debug pcall table newproxy type coroutine _G select gcinfo pairs rawget loadstring ipairs _VERSION dofile setfenv load error loadfile

有什么建议如何获取当前正在执行的文件的路径吗?

点赞
用户1564216
用户1564216

调试库有一个 getinfo 方法,你可以调用它,它可以返回函数的源文件等信息。

local info = debug.getinfo(1,'S');
print(info.source);

这将返回调用堆栈中第一层的函数的源文件名(它将以 @ 符号开头,表示它是一个文件名)。通过传递 1,你正在请求有关当前函数的信息。如果你传递 0,它将返回 =[C],因为它将返回有关 getinfo 函数本身的信息。

有关更详细的信息,请查看官方 Lua 网站上的《Programming in Lua》参考: http://www.lua.org/pil/23.1.html

2014-01-28 21:47:35
用户107090
用户107090

在 Lua 5.2 中,当通过 require 加载脚本时,它会接收到 require 给定的模块名和 require 用于打开脚本的文件名作为参数:

$ cat a.lua
require"b"
$ cat b.lua
print("in b",...)
$ lua a.lua
in b    b   ./b.lua

而在 Lua 5.1 中,只传递了模块名,没有传递文件名。

2014-01-29 00:27:53
用户2434169
用户2434169

作为对 lhf 回答的回应:

由于我是 Lua 的新手,一开始我对 ... 的含义感到困惑。后来我发现它就像 ANSI C 中的可变参数一样:https://www.lua.org/manual/5.3/manual.html#3.4。在我的使用经验中,使用以下语句:

local packageName, packagePath = ...

在 require 中使用时,返回的是包名和包的绝对文件路径。

2018-01-05 01:23:02