Hier eine Implementierung einer locals()
Funktion ist. Es wird eine Tabelle von Einheimischen aus dem rufenden Umfang zurück:
function locals()
local variables = {}
local idx = 1
while true do
local ln, lv = debug.getlocal(2, idx)
if ln ~= nil then
variables[ln] = lv
else
break
end
idx = 1 + idx
end
return variables
end
Beachten Sie, dass in der lua REPL, wobei jede Zeile eine separate Brocken mit separaten Einheimischen ist. Außerdem werden interne Variablen zurückgegeben (Namen beginnen mit ‚(‘ wenn man sie entfernen möchten.):
> local a = 2; for x, v in pairs(locals()) do print(x, v) end
a 2
(*temporary) function: 0x10359b38
Vielen Dank für das akzeptieren Sie haben das letzte Stück des Puzzles entriegelt ;-)
!
Upvalues sind lokale Variablen aus äußeren Bereichen, die in der aktuellen Funktion verwendet werden.Sie sind weder in _G
noch in locals()
function upvalues()
local variables = {}
local idx = 1
local func = debug.getinfo(2, "f").func
while true do
local ln, lv = debug.getupvalue(func, idx)
if ln ~= nil then
variables[ln] = lv
else
break
end
idx = 1 + idx
end
return variables
end
Beispiel (beachten Sie haben eine verwenden, um es zu zeigen):
> local a= 2; function f() local b = a; for x,v in pairs(upvalues()) do print(x,v) end end; f()
a 2
Funktioniert perfekt! Vielen Dank! –
Warum speichert "Paare" in '(* temporäre)'? –
glücklich, es ist eine Lua Implementierung Sache – u0b34a0f6ae