Estoy completamente confundido por Lua variable del alcance y el argumento de la función que pasa (valor o referencia).Ámbito de funciones/variables (¿pasar por valor o referencia?)
ver el código de abajo:
local a = 9 -- since it's define local, should not have func scope
local t = {4,6} -- since it's define local, should not have func scope
function moda(a)
a = 10 -- creates a global var?
end
function modt(t)
t[1] = 7 -- create a global var?
t[2] = 8
end
moda(a)
modt(t)
print(a) -- print 9 (function does not modify the parent variable)
print(t[1]..t[2]) -- print 78 (some how modt is modifying the parent t var)
Como tal, este comportamiento me confunde por completo.
¿Esto significa que las variables de tabla se pasan a la función por referencia y no valoran?
¿Cómo está la creación de variable global en conflicto con la variable local que ya está definida?
- ¿Por qué es capaz de
modt
modificar la tabla todavíamoda
no es capaz de modificar la una variable?
- ¿Por qué es capaz de
Esto es sutilmente diferente de pasar por referencia. (Ver mi respuesta). En particular, el comportamiento de 'function (x) x = {} end' es diferente. –
Todo pasa por valor, por ciertos tipos (tablas, funciones, subprocesos y valores de usuario completos) son referencias. Estas referencias se pasan por valor. – Ethan