С помощью приведенного ниже кода со демонстрационной страницы 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
?