列出 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 中的列表中选择调用哪些函数(呕!)。

点赞
用户752976
用户752976

如果你把它们放在一个“模块”里(无论如何你应该这么做):

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

如果你一定要保留它们的原始形式,你需要以不同的方式加载它们来分离全局环境,然后以类似的方式迭代它们(也许在内部环境的清理 _G 中迭代)。

2013-06-25 10:04:38
用户7806
用户7806

如果你想这样做,最好定义函数为一个包,就像《Lua编程》一书中描述的那样:

functions = {}
function functions.test1() print('foo') end
function functions.test2() print('bar') end
return functions

然后,你可以简单地遍历你的表 functions

2013-06-25 10:05:28
用户107090
用户107090

我看到了三种方法:

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

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

  3. 在 Lua 中使用我的字节码检查器 lbci,其中包含一个报告全局变量的示例。

2013-06-25 10:28:41