Voici une implémentation d'une fonction locals()
. Il retourne une table de la population locale du champ d'application appelant:
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
Notez que dans le lua REPL, chaque ligne est un morceau séparé avec la population locale séparés. En outre, les variables internes sont renvoyés (les noms commencent par « (» si vous voulez les supprimer).
> local a = 2; for x, v in pairs(locals()) do print(x, v) end
a 2
(*temporary) function: 0x10359b38
Merci pour l'accepter Vous avez débloqué le dernier morceau du casse-tête ;-)
!
Les valeurs supérieures sont des variables locales provenant d'étendues externes, utilisées dans la fonction en cours.Ils ne sont ni _G
ni dans 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
Exemple (notez que vous devez utiliser un pour qu'il apparaisse):
> local a= 2; function f() local b = a; for x,v in pairs(upvalues()) do print(x,v) end end; f()
a 2
Fonctionne parfaitement! Merci beaucoup! –
Pourquoi il stocke 'paires' dans' (* temporaire) '? –
heureux, c'est une chose de mise en œuvre de Lua – u0b34a0f6ae