You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中debug.getinfo(1, "n").name异常行为及修正方法问询

解决Lua中debug.getinfo获取函数名的异常问题

这个问题的核心是你对debug.getinfo的栈级别参数理解出现了偏差,咱们一步步拆解清楚:

为什么会出现不同的结果?

你用的debug.getinfo(1, "n").name里,第一个参数1代表的是调用当前函数的那个栈帧(也就是foo或boo的栈帧),而不是myFunc自己的栈帧。

而name字段返回的是函数在调用上下文里的名称,不是函数定义时的名字:

  • 在foo()中,myFunc是作为return语句的直接表达式被调用的,Lua无法从这个上下文里识别出它的调用名称,所以返回nil
  • 在boo()中,myFunc是作为明确的函数调用出现的,上下文里它的调用名就是myFunc,所以返回这个值

如何修正?

如果你想获取myFunc自己的定义名称,只需要把栈级别参数改成0——0代表当前正在执行的函数的栈帧(也就是myFunc自身)。

修正后的代码如下:

function myFunc()
    local name = debug.getinfo(0, "n").name
    return name
end

function foo()
    return myFunc()
end

function boo()
    local name = myFunc()
    return name
end

print(foo()) -- 输出 myFunc
print(boo()) -- 输出 myFunc

额外的健壮性优化

如果你的代码里可能出现匿名函数的情况,可以加个空值判断,避免debug.getinfo返回nil时引发错误:

function myFunc()
    local info = debug.getinfo(0, "n")
    local name = info and info.name or "anonymous"
    return name
end

内容的提问来源于stack exchange,提问作者Zack Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:11:18