Function 在文件中列出Lua函数

Function 在文件中列出Lua函数,function,lua,Function,Lua,如何列出Lua源文件中包含的所有函数 例如,我有fn.lua,它包含 function test1() print("Test 1") end function test2() print("Test 2") end 我希望能够显示来自另一个Lua脚本的那些函数名(test1、test2) 目前我能想到的唯一方法是使用require包含文件,然后在_G中列出函数-但这也将包括所有标准Lua函数 当然,我可以使用字符串搜索函数手动解析文件,但对我来说,这似乎不是

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

例如,我有fn.lua,它包含

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

function test2()
        print("Test 2")
end
我希望能够显示来自另一个Lua脚本的那些函数名(test1、test2)

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

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

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

如果您将它们都放在一个“模块”中(无论如何,您可能应该这样做):

它变得微不足道:

mymodule = require"mymodule"

for fname,obj in pairs(mymodule) do
    if type(obj) == "function" then
        print(fname)
    end
end

如果您必须将它们保持为原始形式,那么您必须以不同的方式加载它们以分离您的全局环境,然后以类似的方式(可能是在内部环境的清理
\u G
)对其进行迭代。

如果您想这样做,最好将函数定义为一个包:

然后您可以简单地迭代表
函数

我看到三种方法:

  • 在加载脚本之前,将名称保存在
    \u G
    中,并在加载脚本之后与
    \u G
    中留下的名称进行比较。我在Lua邮件列表或wiki中看到了一些相关代码,但我现在找不到链接

  • 通过解析
    luac
    listings报告函数中使用的全局变量,如中所示

  • 在Lua中使用我的字节码检查器,它包含一个报告全局的示例


  • 我必须更改输入文件的格式:“mymodule={}函数mymodule.test1()打印(“test1”)结束函数mymodule.test2()打印(“test2”)结束返回mymodule”同样-(我不明白为什么),mymodule表中的函数名是字符串而不是函数。但mymodule.test1()工作正常。@RichardHarvie啊,又一个愚蠢的错误。当然,键将是名称,因此字符串!之前和之后不同的想法真的很好,我不会去想。我想比较一下,但希望有一个更简单的方法。我喜欢使用luac的想法,因为我考虑使用luac进行基本语法检查。
    mymodule = require"mymodule"
    
    for fname,obj in pairs(mymodule) do
        if type(obj) == "function" then
            print(fname)
        end
    end
    
    functions = {}
    function functions.test1() print('foo') end
    function functions.test2() print('bar') end
    return functions