将Lua函数列在文件中

时间:2013-06-25 10:00:44

标签: function lua

如何列出Lua源文件中包含的所有函数?

例如,我有fn.lua,其中包含

function test1()
        print("Test 1")
end

function test2()
        print("Test 2")
end

我希望能够从另一个Lua脚本中显示这些函数名称(test1,test2)。

我现在唯一能想到的方法是使用require包含文件,然后列出_G中的函数 - 但这也将包括所有标准的Lua函数。

当然我可以使用字符串搜索功能手动解析文件,但这对我来说似乎不是很好!

这最终将成为允许开发人员在Lua中编写函数的过程的一部分,并且操作员可以从Excel中的列表中选择调用哪些函数(yuk!)。

3 个答案:

答案 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)

我看到三种方式:

  1. 在加载脚本之前将名称保存在_G中,并与加载后_G中的名称进行比较。我已经在Lua邮件列表或wiki中看到了一些代码,但我现在找不到链接。

  2. 通过解析luac列表来报告函数中使用的全局变量,如http://lua-users.org/lists/lua-l/2012-12/msg00397.html中所示。

  3. 在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