有没有办法在 Lua 中反省一个函数?

Is there a way to introspect a function in Lua?

我正在 love2d (LuaJIT) 中创建游戏,并且正在创建调试 window 以在运行时更改值。我能够做到这一点,但是,我现在也希望能够调用函数。比如我遍历了一个table,这个table里面有一个函数叫"hello",写法是这样的:

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

type(object.hello)的表达我只看到function。如果它是 table,我可以遍历它并查看键和值,但它只是一个 "function",我不知道如何正确调用它,因为我不知道它需要什么参数以及有多少参数。在 lua 中有没有办法在运行时找到它?也许这些信息也存储在某些 table 其他地方?

it is just a "function" and I have no idea how to properly call it

Lua也没有。就 Lua 而言,任何 Lua 函数都可以采用任意数量的参数,并且 return 可以采用任意数量的参数。这些参数可以是任何类型,其 return 值也可以。

Lua本身不存储这些信息。或者至少,如果不对其字节码进行一些反编译,您将无法以任何方式进行检索。由于您使用的是 LuaJIT,因此 "decompiling" 可能需要反编译 assembly.