Debugging 如何获取函数';用Lua中的指针命名?

Debugging 如何获取函数';用Lua中的指针命名?,debugging,function,lua,Debugging,Function,Lua,在Lua中,我为我的表/对象创建了一个漂亮的打印机。但是,当显示函数时,它将显示为指针 我一直在阅读,但是当我使用debug.getinfo()内省函数时,它不会返回函数名。这似乎是由于范围问题,但我不知道如何绕过它 使用指针获取函数名的最佳方法是什么?(我知道函数是Lua中的头等公民,可以匿名创建,这很好)创建函数时,将它们注册到表中,并将它们用作键 local tableNames = {} function registerFunction(f, name) tableNames[f

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

我一直在阅读,但是当我使用
debug.getinfo()
内省函数时,它不会返回函数名。这似乎是由于范围问题,但我不知道如何绕过它


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

创建函数时,将它们注册到表中,并将它们用作键

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"

创建函数时,将它们注册到表中,并将它们用作键

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"

出于某种原因,它似乎只适用于数字参数(即堆栈上的活动函数)

剧本

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

出于某种原因,它似乎只适用于数字参数(即堆栈上的活动函数)

剧本

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

请看这个问题:我希望在不修改函数的情况下完成它。我想得到我的表格打印机的函数名。请看这个问题:我希望在不需要实际修改函数的情况下完成它。我想得到我的表格打印机的函数名。@Soviut我也打算这样回答。技术上讲,Lua函数没有名称。当您输入
function foo()
时,与执行
foo=function()
相同。换句话说,该函数是一个自由代理,恰好有一个名为
foo
的变量指向它。@Soviut我也将用类似的东西来响应它。技术上讲,Lua函数没有名称。当您输入
function foo()
时,与执行
foo=function()
相同。换句话说,函数是一个自由代理,恰好有一个名为
foo
的变量指向它。