获取对 Lua 中调用函数的引用
Get Reference to Calling Function in Lua
我知道我可以使用 debug.getinfo(1, "n").name
来获取调用函数的名称,但我想获取对该函数指针本身的引用。
对于 debug.getlocal()
,f
参数是堆栈位置,因此我只需选择正确的索引即可轻松获取调用函数的局部变量。但是对于debug.getupvalue()
,f
参数就是函数指针本身,我没有。
这是一个简短的示例,但有违规行 debug.getupvalue(someFunction, index)
以演示我想要完成的工作,没有硬编码参考。
local someUpValue = "Whosebug"
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("Local of %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("Upvalue of %s: Name: %s Value: %s", callingFuncName, name, value))
else
break
end
index = index + 1
end
end
someFunction()
您可以使用 debug.getinfo(2, "f").func
获取函数引用(假设您是从要获取引用的函数调用):
function log()
local callingFuncRef = debug.getinfo(2, "f").func
callingFuncRef(false) -- this will call the function, so make sure there is no loop
我知道我可以使用 debug.getinfo(1, "n").name
来获取调用函数的名称,但我想获取对该函数指针本身的引用。
对于 debug.getlocal()
,f
参数是堆栈位置,因此我只需选择正确的索引即可轻松获取调用函数的局部变量。但是对于debug.getupvalue()
,f
参数就是函数指针本身,我没有。
这是一个简短的示例,但有违规行 debug.getupvalue(someFunction, index)
以演示我想要完成的工作,没有硬编码参考。
local someUpValue = "Whosebug"
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("Local of %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("Upvalue of %s: Name: %s Value: %s", callingFuncName, name, value))
else
break
end
index = index + 1
end
end
someFunction()
您可以使用 debug.getinfo(2, "f").func
获取函数引用(假设您是从要获取引用的函数调用):
function log()
local callingFuncRef = debug.getinfo(2, "f").func
callingFuncRef(false) -- this will call the function, so make sure there is no loop