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

sky*_*000 4 lua

我正在编写一个脚本testmodule.lua并想检查这个文件是从另一个脚本导入/需要的还是由lua testmodule.lua.

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

Python 有一个__name__声明:

if __name__ == '__main__':
    main_entry()
Run Code Online (Sandbox Code Playgroud)

lua中有类似的东西吗?

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

Pau*_*nko 5

您可以使用以下检查:

if pcall(debug.getlocal, 4, 1) then
  print("in package")
else
  print("in main script")
end
Run Code Online (Sandbox Code Playgroud)

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

需要注意的是它不区分requiredofileloadfile其他类似的电话或。您可能需要查看Lua 邮件列表上的这个最近的线程,该线程讨论了检查这些调用以及一些替代方法。