gpt4 book ai didi

lua - debug.traceback 如何获取它的信息?

转载 作者:行者123 更新时间:2023-12-04 02:57:39 26 4
gpt4 key购买 nike

使用 Lua 演示页面中的以下代码,我试图获取被调用函数的名称。

function test()
local info = debug.getinfo(1);

for k, v in pairs(info) do
print(k, v);
end;
end;

pcall(function()
test();
end);

这是成功的,因为我收到了以下输出,其中包含名称:

source  =input
func function: 0x25a1830
nparams 0
short_src input
isvararg false
name test
namewhat global
istailcall false
linedefined 1
lastlinedefined 7
nups 1
currentline 2
what Lua

如果我将代码更改为以下内容,我将不再获得该信息:

function test()
local info = debug.getinfo(1);

for k, v in pairs(info) do
print(k, v);
end;
end;

pcall(test);

输出如下:

func    function: 0x21ee790
linedefined 1
nups 1
short_src input
namewhat
lastlinedefined 7
isvararg false
istailcall false
what Lua
source =input
currentline 2
nparams 0

但是,如果我将代码更改为以下内容,我可以获得传递给 pcall 的函数的名称:

function test()
local traceback = debug.traceback();

print(traceback);
end;

pcall(test);

输出如下:

stack traceback:
input:2: in function 'test'
[C]: in function 'pcall'
input:7: in main chunk
[C]: in function 'pcall'
demo.lua:49: in main chunk
[C]: in ?

debug.traceback 是如何获取这些额外信息的?仅使用 Lua 有没有办法在不从 debug.traceback 的返回值中提取它的情况下获取它?

最佳答案

debug.getinfodebug.traceback 从各种来源获取他们的信息,其中一些是 hacky。例如,函数名称通常是从调用函数的源代码中提取出来的:无论代码用来查找它所调用的东西的名称是什么,它都会被用作名称。 (这就是为什么你的第二个代码片段没有给你这个名字:pcall 没有 Lua 字节码支持它,所以它不能告诉你“测试”,除非中间有一个函数称它为“测试”。)Lua 函数没有固有名称,Lua 整数也没有;函数只是另一种值,可以通过一些语法糖自动分配给变量。

关于lua - debug.traceback 如何获取它的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com