转储带参数的 Lua 函数

是否可以将 Lua 表转储包括函数参数? 如果可以,我该如何操作?

我已经成功转储了带有地址的表和函数,但我无法找到获取函数参数的方法,我尝试了不同的方法,但没有成功。

因此,我想通过转储表和函数以及函数参数来接收它们。 输出应该是这样的:Function JumpHigh(Player, height)

我不知道这是否可能,但这将非常方便。

点赞
用户5675002
用户5675002

表只存储值。

如果表中存储了函数,则只有函数体,没有参数。如果应用了参数,则表将仅存储该调用的最终结果。

也许你在谈论闭包——从其他函数返回的函数,在词法闭包中捕获了来自顶层函数的一些参数?那么可以使用 debug.getupvalue() 函数来检查闭包的内容。

这是你要问的东西吗?

local function do_some_action(x,y)
    return function()
        print(x,y)
    end
end

local t = {
    func = do_some_action(123,478)
}

-- only function value printed
print "Table content:"
for k,v in pairs(t) do
    print(k,v)
end

-- list function's upvalues, where captured arguments may be stored
print "Function's upvalues"
local i = 0
repeat
    i = i + 1
    local name, val = debug.getupvalue(t.func, i)
    if name then
        print(name, val)
    end
until not name

请注意,存储的上值不一定是顶层函数的参数。它可能是一些本地变量,为内部函数存储的预计算值。

还请注意,如果脚本被预编译为 Lua 字节码并剥去了调试信息,则无法获取上值的名称,这些名称将为空。

2017-07-04 08:22:38