Lua 中是否有一种方法可以自省一个函数?

我正在使用 love2d(LuaJIT)创建一个游戏,并为更改运行时值创建了一个调试窗口。我已经能够做到这一点,但是现在我也想能够调用函数。例如,我遍历一个表格,在这个表格中有一个名为“hello”的函数,它的写法如下所示:

self.hello = function(str, num)
    print(string.format("%s: %d", str, num))
end

type(object.hello) 的表达式中,我只看到了 function。如果它是一个表格的话,我可以遍历它并查看键和值,但它只是一个“函数”,我不知道如何正确调用它,因为我不知道它需要什么参数和数量。在 Lua 中是否有一种方法可以在运行时找到这个信息?也许这些信息还存储在其他某个表格中?

点赞
用户734069
用户734069

这只是一个“函数”,我不知道如何正确地调用它

Lua 也不知道。就 Lua 而言,任何 Lua 函数都可以接收任意数量的参数并返回任意数量的参数。这些参数可以是任何类型,其返回值也可以是任何类型。

Lua 本身不存储这些信息。或者说,除非对其字节码进行一些反编译,否则你无法检索到任何信息。而且,由于你正在使用 LuaJIT,这种“反编译”可能需要反编译 _汇编代码_。

2020-06-16 15:19:56