在Lua中,我为我的表/对象创建了一个漂亮的打印机。但是,当显示一个函数时,它会显示为指针。
我一直在阅读Lua Introspection,但当我用debug.getinfo()
反省函数时,它不会返回函数的名称。这似乎是由于范围问题,但我不确定如何绕过它。
使用指针获取函数名称的最佳方法是什么? (我知道函数是Lua中的一等公民,他们可以匿名创建,这很好)
答案 0 :(得分:4)
创建函数时,将它们注册在表中,并将它们用作键。
local tableNames = {}
function registerFunction(f, name)
tableNames[f] = name
end
function getFunctionName(f)
return tableNames[f]
end
...
function foo()
..
end
registerFunction(foo, "foo")
...
getFunctionName(foo) -- will return "foo"
答案 1 :(得分:1)
出于某种原因,它似乎只适用于数字参数(即堆栈上的活动函数)。
脚本
function a() return debug.getinfo(1,'n') end
function prettyinfo(info)
for k,v in pairs(info) do print(k,v) end
end
prettyinfo(a())
打印
name a
namewhat global
但如果我将最后一行更改为
prettyinfo(debug.getinfo(a, 'n'))
它只给我一个空字符串:
namewhat