如何通过Lua中的指针获取函数的名称?

时间:2012-01-14 23:35:14

标签: debugging function lua

在Lua中,我为我的表/对象创建了一个漂亮的打印机。但是,当显示一个函数时,它会显示为指针。

我一直在阅读Lua Introspection,但当我用debug.getinfo()反省函数时,它不会返回函数的名称。这似乎是由于范围问题,但我不确定如何绕过它。

使用指针获取函数名称的最佳方法是什么? (我知道函数是Lua中的一等公民,他们可以匿名创建,这很好)

2 个答案:

答案 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