如何判断我的代码是否运行在lua模块中?

问题描述 投票:0回答:2

我正在编写一个脚本

testmodule.lua
,想要检查该文件是否是从另一个脚本导入/需要的,或者是直接由
lua testmodule.lua
启动的。

如果是直接通过命令行启动,我可以做一些测试或运行主函数,否则只需导出一些函数而不执行任何操作。

Python 有一个

__name__
语句:

if __name__ == '__main__':
    main_entry()

lua中有类似的东西吗?

在单个文件中编写 shell util 非常有用,它可以直接运行并由其他 lua 脚本导入。但是当某些脚本导入此文件时,我不喜欢调用 main 函数。

lua
2个回答
14
投票

您可以使用以下检查:

if pcall(debug.getlocal, 4, 1) then
  print("in package")
else
  print("in main script")
end

它检查第四级的第一个变量中是否有任何内容,这将是当前模块的调用者(如果需要),或者在主脚本的情况下没有任何内容。

请注意,它不区分

require
dofile
loadfile
或其他类似的调用。您可能想查看 Lua 邮件列表上最近的帖子,其中讨论了检查这些调用以及一些替代方法。


0
投票

这个怎么样?

if debug.getinfo(3) then
  print("in package")
else
  print("in main script")
end

同样的想法,更少的击键。 级别 3 作为参数就足够了,因为

debug.getinfo
不会在另一个函数中调用。

© www.soinside.com 2019 - 2024. All rights reserved.