有没有一种简单的方式来获取Lua代码文件中定义的所有全局变量?

每个人都知道,在Lua中,如果没有明确定义为“local”,则变量将是全局的。这有时会引起问题,比如覆盖库函数,或者意外地为另一个同名全局变量提供值。因此,如果有一种方法可以找到在单个Lua代码文件中定义的所有全局变量,那将非常有帮助。

然而,我未能找到任何线索,这似乎是相当普遍的问题。我可以在网上获得的最好答案是使用_G在环境中打印所有全局变量,这没有太多帮助。我目前正在使用Emmylua在Intellij Idea中编写Lua,它是一个强大的工具,可以以特殊的样式显示全局变量,并且可以轻松地跟踪全局变量到其定义;但当代码变得非常长时,这也不太有帮助。

因此,基本上,我只想获取给定Lua代码文件中定义的全局变量列表。可以使用工具或出色的功能。如果可以简化事情,我们可以假设代码文件是一个模块。如果可以进一步打印这些全局变量的定义位置,那就更好了。有人能帮我吗?

点赞
用户2226988
用户2226988

是的。本地和全局是一个绑定问题,这主要是在编译时确定的。当然,在编译时设置变量是很明确的。

Lua提供了luac编译器,它接受参数-l用于列表。

在Lua 5.1中,有一个叫做SETGLOBAL的操作码。一列表示语句的行号,注释表示全局变量的名称。

在5.2及以后的版本中,有一个叫做SETTABUP的操作码。一列表示语句的行号,注释表示表格和键的名称。 "Globals"在由_ENV upvalue引用的表中。

因此,您可以使用Lua提供的工具轻松找到设置全局变量的任何语句的行号。

顺便说一下,在许多模块系统下,模块脚本不会设置任何全局变量。

2019-03-31 23:16:19