为什么debug.getinfo(1)的name属性会显示nil而不是具体的函数名?

2026-04-01 20:161阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计526个文字,预计阅读时间需要3分钟。

为什么debug.getinfo(1)的name属性会显示nil而不是具体的函数名?

我正在尝试构建一个lua测试框架,以便了解存在问题的函数。但当我从loadstring切换到G时(切换后,我可以通过我的测试工具看到函数调用的结果),我的函数已开始使用nil作为函数名。为什么?

我正在尝试组建一个lua测试框架,让你知道有问题的函数,但是当我从loadstring切换到_G时,(我切换所以我的测试工具可以看到函数调用的结果)我的函数已经开始使用’nil’作为函数名

为什么_G不能在以下代码中检测当前函数的名称?另外,如何从loadstring中获取返回结果(即来自blah调用的’false’)或者在使用_G时设置函数名称(即告诉lua解释器函数名称应该是什么)?

function run_test(one, two) if one ~= two then print(debug.getinfo(2).name..' Failed') end end function blah() run_test(false, true) return false end local fname = 'blah' local status, result = pcall(_G[fname]) -- Outputs 'nil'; result is 'false' local status, result = pcall(loadstring(fname..'()')) -- Outputs 'blah', result is 'nil'

我需要的主要方法是使用函数名称的字符串调用函数,能够在调用中看到函数名称(对于测试失败指向失败的函数,如fname =’blah’中的上面的代码)并能够获得返回值

local fname = 'blah' status, result = pcall(??Call fname somehow??) assert(status) assert(not result) --stdout should be "blah Failed" 这是Lua用于为函数提供名称的启发式方法的限制.

在Lua中,所有函数都是匿名的.给定函数可以是几个变量的值:全局,本地和表字段. Lua调试系统通过查看正在执行的字节码,尝试根据值来找到值的合理名称.

为什么debug.getinfo(1)的name属性会显示nil而不是具体的函数名?

考虑一个更简单的例子

blah() pcall(blah)

在第一次调用中,调试系统看到被调用的函数来自全局blah,而debug.getinfo(1).name给出了预期的结果,等等.

在第二次调用中,调试系统看到被调用的函数来自pcall的第一个参数,但它看不到该参数的来源,而debug.getinfo(1).name给出nil.

当你调用_G [name]()时会发生同样的事情.所有调试系统看到的是一个表的字段,并且字段的名称太远了.

尝试添加print(debug.traceback())作为第一行等等,以便看到另一个解释.

标签:na

本文共计526个文字,预计阅读时间需要3分钟。

为什么debug.getinfo(1)的name属性会显示nil而不是具体的函数名?

我正在尝试构建一个lua测试框架,以便了解存在问题的函数。但当我从loadstring切换到G时(切换后,我可以通过我的测试工具看到函数调用的结果),我的函数已开始使用nil作为函数名。为什么?

我正在尝试组建一个lua测试框架,让你知道有问题的函数,但是当我从loadstring切换到_G时,(我切换所以我的测试工具可以看到函数调用的结果)我的函数已经开始使用’nil’作为函数名

为什么_G不能在以下代码中检测当前函数的名称?另外,如何从loadstring中获取返回结果(即来自blah调用的’false’)或者在使用_G时设置函数名称(即告诉lua解释器函数名称应该是什么)?

function run_test(one, two) if one ~= two then print(debug.getinfo(2).name..' Failed') end end function blah() run_test(false, true) return false end local fname = 'blah' local status, result = pcall(_G[fname]) -- Outputs 'nil'; result is 'false' local status, result = pcall(loadstring(fname..'()')) -- Outputs 'blah', result is 'nil'

我需要的主要方法是使用函数名称的字符串调用函数,能够在调用中看到函数名称(对于测试失败指向失败的函数,如fname =’blah’中的上面的代码)并能够获得返回值

local fname = 'blah' status, result = pcall(??Call fname somehow??) assert(status) assert(not result) --stdout should be "blah Failed" 这是Lua用于为函数提供名称的启发式方法的限制.

在Lua中,所有函数都是匿名的.给定函数可以是几个变量的值:全局,本地和表字段. Lua调试系统通过查看正在执行的字节码,尝试根据值来找到值的合理名称.

为什么debug.getinfo(1)的name属性会显示nil而不是具体的函数名?

考虑一个更简单的例子

blah() pcall(blah)

在第一次调用中,调试系统看到被调用的函数来自全局blah,而debug.getinfo(1).name给出了预期的结果,等等.

在第二次调用中,调试系统看到被调用的函数来自pcall的第一个参数,但它看不到该参数的来源,而debug.getinfo(1).name给出nil.

当你调用_G [name]()时会发生同样的事情.所有调试系统看到的是一个表的字段,并且字段的名称太远了.

尝试添加print(debug.traceback())作为第一行等等,以便看到另一个解释.

标签:na