Module Lua包含当前文件路径的全局变量?
Lua中是否存在包含当前正在解释的文件路径的全局变量?类似于Python的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
\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
设置源文件的方式。