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

Module Lua包含当前文件路径的全局变量?,module,lua,filesystems,filenames,interpreter,Module,Lua,Filesystems,Filenames,Interpreter,Lua中是否存在包含当前正在解释的文件路径的全局变量?类似于Python的\uuuuuuuuuuuuuuuu变量 我在解释器中对k,v成对(_G)do print(k)end运行了一个快速,看看是否能找到任何东西。仅列出了以下变量 string xpcall package to string print os unpack require getfenv setmetatable next assert tonumber io rawequal collect垃圾getmetatable模块r

Lua中是否存在包含当前正在解释的文件路径的全局变量?类似于Python的
\uuuuuuuuuuuuuuuu
变量

我在解释器中对k,v成对(_G)do print(k)end运行了一个快速
,看看是否能找到任何东西。仅列出了以下变量

string xpcall package to string print os unpack require getfenv setmetatable next assert tonumber io rawequal collect垃圾getmetatable模块rawset math debug pcall table newproxy type corroutine\u G选择gcinfo pairs rawget loadstring ipairs\u VERSION dofile setfenv load error loadfile


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

调试库有一个可以调用的
getinfo
方法,该方法可以返回函数的源文件

local info = debug.getinfo(1,'S');
print(info.source);
这将返回调用堆栈第一级函数的源文件名(以@符号开头,表示它是文件名)。通过传递
1
可以询问有关当前函数的信息。如果您传入
0
它将返回
=[C]
,就像它将返回有关
getinfo
函数本身的信息一样

有关更多详细信息,请查看Lua官方网站上的
Lua编程
参考:

在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

在Lua5.1中,只传递模块名,而不传递文件名。

回答如下:
作为Lua的新手,我最初对
的含义感到困惑。原来它是一个vararg,就像ANSI C:。根据我使用Lua5.3的经验,使用

local packageName, packagePath = ...

获取了在require中使用的包名以及包的绝对文件路径。

这将返回启动Lua时使用的文件名,但不会返回“当前文件”,这将随
require
命令而改变。请注意,
arg
表仅在通过
lua
命令行解释器运行脚本时可用。这完全可以工作,但前提是:1)在运行它的lua的构建中,
debug
库可用。2) 正在运行的代码没有使用调试信息进行预编译(例如,使用
luac-s
)。这两件事都不总是在剧本作者的控制之下。+1对于我在最初的回答中应该指出的非常有效的观点。谢谢你的澄清!还请注意,
loadstring
等函数可以将值设置为任意字符串。这就是为什么我提到文件名将以
@
开头,否则,如果使用
loadstring
,则源将实际包含传递给
loadstring
的源。您可以将块名作为第二个参数传递给loadstring。例如:
loadstring(“foo()”,“@/this/file/doesnt/exist”)
。这就是
require
设置源文件的方式。