Lua中获取调用函数的引用

我知道可以使用debug.getinfo(1, "n").name来获取调用函数的名称,但我想要获取该函数指针本身的引用。

对于debug.getlocal(),参数f是堆栈位置,所以我可以通过选择正确的索引来轻松获取调用函数的本地变量。但是对于debug.getupvalue(),参数f是函数指针本身,而我没有这个指针。

这里是一个简短的示例,其中有一个有问题的行debug.getupvalue(someFunction, index),以演示我想要实现的内容,而不需要硬编码引用。

local someUpValue = "stackoverflow"

function someFunction()
    local value1 = "hi"
    local value2 = "there"
    local value3 = someUpValue

    log()
end

function log()
    local callingFuncName = debug.getinfo(2, "n").name

    local index = 1
    while(true) do
        local name, value = debug.getlocal(2, index)
        if name then
            print(string.format("%s的本地变量: Name: %s Value: %s", callingFuncName, name, value))
        else
            break
        end
        index = index + 1
    end

    index = 1
    while(true) do
        local name, value = debug.getupvalue(someFunction, index)
        if name then
            print(string.format("%s的上值: Name: %s Value: %s", callingFuncName, name, value))
        else
            break
        end
        index = index + 1
    end
end

someFunction()
点赞
用户1442917
用户1442917

你可以使用 debug.getinfo(2, "f").func 来获取函数的引用(假设你是从想要获取引用的函数中调用的):

function log()
    local callingFuncRef = debug.getinfo(2, "f").func
    callingFuncRef(false) -- 这会调用该函数,所以请确保没有死循环
2018-02-12 02:58:43