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
有关如何获取当前正在执行的文件的路径的任何建议?
答案 0 :(得分:7)
调试库有一个可以调用的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
答案 1 :(得分:6)
在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中,只传递模块名称,而不是文件名。
答案 2 :(得分:3)
回答lhf的回答:
作为Lua的新手,我最初对...
的意思感到困惑。事实证明它与ANSI C:https://www.lua.org/manual/5.3/manual.html#3.4一样是一种变体。根据我使用lua 5.3的经验,使用
local packageName, packagePath = ...
获取包名称,如在require和包的绝对文件路径中使用的那样。