Local por defecto

Local por defecto

de Gustavo Daniel Evovlockas Yamborski -
Número de respuestas: 1

¿Cual era el motivo por el cual las variables no eran locales por defecto?

En respuesta a Gustavo Daniel Evovlockas Yamborski

Re: Local por defecto

de Jorge Visca -

Un buen resumen del problema se encuentra acá: http://lua-users.org/wiki/LocalByDefault

El quid del asunto: local por defecto no funciona cuando tenes alcance de variables léxico de verdad (true lexical scoping). Un ejemplo simple es este:

x=1
function f()
x=2
end
f()
print(x)

En ese fragmento de código, como distinguís entre las posibilidades donde el acceso a "x" dentro del bloque es a la misma variable definida afuera, o a una nueva? En una el print imprimiría 1, en la otra 2. La regla local por defecto impide completamente la primer opción. Para que el alcance léxico funcione, hay que distinguir entre creación de variables y asignación. 

Y además hay que acordarse que pueden haber múltiples niveles de alcance (funciones definidas adentro de funciones adentro de otras funciones). 

Un buen ejercicio es ver qué hacen otros lenguajes, p.ej. Perl o Python, y ver qué consecuencias tiene.