Aquí es una implementación de una función locals()
. Se devolverá una tabla de los locales del ámbito de llamar:
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
en cuenta que en el REPL lua, cada línea es una parte separada con los locales separados. Además, las variables internas se devuelven (nombres comienzan con '(' si quieres eliminarlos):.
> local a = 2; for x, v in pairs(locals()) do print(x, v) end
a 2
(*temporary) function: 0x10359b38
Gracias por el aceptar que haya desbloqueado la última pieza del rompecabezas ;-)
!
Los valores ascendentes son variables locales de los ámbitos externos que se utilizan en la función actual.No son ni en _G
ni en 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
Ejemplo (nótese que hay que utilizar una para que aparezca):
> local a= 2; function f() local b = a; for x,v in pairs(upvalues()) do print(x,v) end end; f()
a 2
¡Funciona perfectamente! ¡Muchas gracias! –
¿Por qué almacena 'pares' en' (* temporal) '? –
feliz, es una cosa de implementación Lua – u0b34a0f6ae