如何列出Lua源文件中包含的所有函数?
例如,我有fn.lua,其中包含
function test1()
print("Test 1")
end
function test2()
print("Test 2")
end
我希望能够从另一个Lua脚本中显示这些函数名称(test1,test2)。
我现在唯一能想到的方法是使用require包含文件,然后列出_G中的函数 - 但这也将包括所有标准的Lua函数。
当然我可以使用字符串搜索功能手动解析文件,但这对我来说似乎不是很好!
这最终将成为允许开发人员在Lua中编写函数的过程的一部分,并且操作员可以从Excel中的列表中选择调用哪些函数(yuk!)。
答案 0 :(得分:6)
如果你把它们都放在一个“模块”中(无论如何你应该这样做):
mymodule = { }
function mymodule.test1()
print("Test 1")
end
function module.test2()
print("Test 2")
end
return mymodule
它变得微不足道了:
mymodule = require"mymodule"
for fname,obj in pairs(mymodule) do
if type(obj) == "function" then
print(fname)
end
end
如果你必须以原始形式保存它们,你必须以不同的方式加载它们以分离你的全局环境,然后以类似的方式迭代它(通过内部env的清理{{1}或许)。
答案 1 :(得分:3)
我看到三种方式:
在加载脚本之前将名称保存在_G
中,并与加载后_G
中的名称进行比较。我已经在Lua邮件列表或wiki中看到了一些代码,但我现在找不到链接。
通过解析luac
列表来报告函数中使用的全局变量,如http://lua-users.org/lists/lua-l/2012-12/msg00397.html中所示。
在Lua中使用我的字节码检查器lbci,其中包含一个报告全局变量的示例。
答案 2 :(得分:1)
如果你想这样做,最好定义一个包是as described in Programming in Lua book的函数:
functions = {}
function functions.test1() print('foo') end
function functions.test2() print('bar') end
return functions
然后你可以简单地迭代你的表functions
。