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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含当前文件路径的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

有关如何获取当前正在执行的文件的路径的任何建议?

答案

调试库有一个可以调用的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

另一答案

在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中,只传递模块名称,而不是文件名。

另一答案

回应lhf的回答: 作为Lua的新手,我最初对...的意思感到困惑。事实证明这是一个vararg,就像ANSI C:https://www.lua.org/manual/5.3/manual.html#3.4一样。根据我对lua 5.3的使用经验,使用

local packageName, packagePath = ...

给我一个包名,就像在require中使用的那样,以及包的绝对文件路径。

以上是关于包含当前文件路径的Lua全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

Lua笔记——4.环境Environment

使用包含路径定义全局变量

route和router 当前与全局路由

lua 变量

为啥lua语言中使用全局变量就会造成内存泄漏

为啥lua语言中使用全局变量就会造成内存泄漏呢??