Ich versuche, ein Lua-Test-Framework, dass Sie die Funktion kennen, die das Problem hatte, aber wenn ich von Loadstring zu _G
wechselte, (ich wechselte So konnte mein Testkabelbaum die Ergebnisse des Funktionsaufrufs sehen) Meine Funktionen begannen mit 'Null' für den FunktionsnamenWarum ist 'name' nil für debug.getinfo (1)
Warum kann _G
den Namen der aktuellen Funktion im folgenden Code nicht erkennen? Wie kann ich die Ergebnisse von loadstring (dh die 'false' aus dem Blah-Aufruf) erhalten oder den Funktionsnamen bei Verwendung von _G
setzen (dh dem Lua-Interpreter mitteilen, wie der Funktionsname lauten soll)?
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'
Die Hauptsache ich brauche, ist eine Möglichkeit, eine Funktion mit einer Zeichenfolge der Funktion Namen zu nennen, in der Lage sein, die Funktionsnamen innerhalb des Anrufs zu sehen (für Ausfälle Test auf die Funktion zu zeigen, wie gescheitert fname = ‚blah‘ im Code oben) und in der Lage sein, den Rückgabewert zu erhalten
local fname = 'blah'
status, result = pcall(??Call fname somehow??)
assert(status)
assert(not result)
--stdout should be "blah Failed"
Nur eine Vermutung, aber könnte es sein, weil 'pcall' in C land geht und Funktionswerte auf dem Stapel keinen zugehörigen symbolischen Namen in diesem Zusammenhang haben? – greatwolf
Beide Linien verwenden pcall. Plus, es ist das Gegenteil von dem, was ich erwarten würde, da loadstring 'mehr' dynamisch ist als _G –
ja, aber die zweite Zeile hat den Effekt, eine anonyme Funktion über 'blah' zu wickeln und das geht zurück nach lua land. – greatwolf