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

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

我一直在阅读Lua内省,但是当我使用debug.getinfo()内省函数时,它不会返回函数的名称。这似乎是由于作用域问题,但我不确定如何解决它。

使用其指针获取函数名称的最佳方法是什么?(我理解函数是Lua中的一等公民,它们可以匿名创建,这没问题)

原文链接 https://stackoverflow.com/questions/8866311

点赞
stackoverflow用户312586
stackoverflow用户312586

当你创建函数时,要在一个表中注册它们,使用它们作为键。

local tableNames = {} -- 创建一个空表用于注册函数名称

function registerFunction(f, name) -- 注册函数
  tableNames[f] = name
end

function getFunctionName(f) -- 获取函数名称
  return tableNames[f]
end

...
function foo() -- 定义函数
  ..
end
registerFunction(foo, "foo") -- 注册函数名为 "foo"

...

getFunctionName(foo) -- 将返回 "foo"
2012-01-15 00:36:38
stackoverflow用户962150
stackoverflow用户962150

由某种原因,它似乎仅适用于数字参数(也就是说,堆栈上的活动函数)。

脚本

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
2012-01-17 14:15:45