用参数转储lua func

时间:2017-07-03 22:01:43

标签: lua dump

是否可能转储包含函数参数的Lua表? 如果是这样,我该怎么做?

我已经成功地使用地址转储表和函数,但我还没有找到一种方法来获取函数args,我尝试了不同的方法,但没有运气。

所以我想接收它们真相转储表和函数以及函数的args。 输出应该是这样的:函数JumpHigh(播放器,高度)

我不知道它是否可能,但会非常方便。

1 个答案:

答案 0 :(得分:1)

表仅存储值。

如果函数存储在表中,那么它只是一个函数体,没有参数。如果应用了参数,则表将仅存储该调用的最终结果。

也许你在谈论闭包 - 从其他函数返回的函数,从词法闭包中的顶级函数中捕获一些参数?然后查看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

请注意,存储的upvalues不一定是顶级函数的参数。它可能是一些局部变量,存储内部函数的预计算值。

另请注意,如果脚本已预先编译为Lua字节码并带有调试信息,那么您将无法获取upvalues的名称,这些名称将为空。