我正在编写一个脚本
testmodule.lua
,想要检查该文件是否是从另一个脚本导入/需要的,或者是直接由lua testmodule.lua
启动的。
如果是直接通过命令行启动,我可以做一些测试或运行主函数,否则只需导出一些函数而不执行任何操作。
Python 有一个
__name__
语句:
if __name__ == '__main__':
main_entry()
lua中有类似的东西吗?
在单个文件中编写 shell util 非常有用,它可以直接运行并由其他 lua 脚本导入。但是当某些脚本导入此文件时,我不喜欢调用 main 函数。
您可以使用以下检查:
if pcall(debug.getlocal, 4, 1) then
print("in package")
else
print("in main script")
end
它检查第四级的第一个变量中是否有任何内容,这将是当前模块的调用者(如果需要),或者在主脚本的情况下没有任何内容。
请注意,它不区分
require
、dofile
、loadfile
或其他类似的调用。您可能想查看 Lua 邮件列表上最近的帖子,其中讨论了检查这些调用以及一些替代方法。
这个怎么样?
if debug.getinfo(3) then
print("in package")
else
print("in main script")
end
同样的想法,更少的击键。 级别 3 作为参数就足够了,因为
debug.getinfo
不会在另一个函数中调用。