Variables en Lua
Antes de usar una variable, es necesario declararla en el código, es decir, crearla.
Antes de que el programa compilado ejecute el código, el compilador necesita saber cómo asignar un área de almacenamiento para las variables de las sentencias, con el fin de almacenar el valor de las variables.
Las variables en Lua tienen tres tipos: variables globales, variables locales y los campos de una tabla.
En Lua, todas las variables son globales, incluso dentro de bloques de sentencias o funciones, a menos que se declaren explícitamente como locales con 'local'.
El ámbito de una variable local va desde el lugar de su declaración hasta el final del bloque de sentencias en el que se encuentra.
El valor predeterminado de las variables es nil.
Ejemplo
a = 5 -- variable global
local b = 5 -- variable local
function joke()
c = 5 -- variable global
local d = 6 -- variable local
end
joke()
print(c,d) --> 5 nil
do
local a = 6 -- variable local
b = 6 -- reasignar un valor a la variable local
print(a,b); --> 6 6
end
print(a,b) --> 5 6
Al ejecutar el ejemplo anterior, el resultado es:
$ lua test.lua 5 nil 6 6 5 6
Sentencia de asignación
La asignación es el método más básico para cambiar el valor de una variable y modificar los campos de una tabla.
a = "hello" .. "world" t.n = t.n + 1Lua puede asignar valores a múltiples variables al mismo tiempo. Los elementos de la lista de variables y de la lista de valores se separan con comas; los valores del lado derecho de la sentencia de asignación se asignan por orden a las variables de la izquierda.
a, b = 10, 2*x <--> a=10; b=2*x
Cuando se encuentra una sentencia de asignación, Lua primero evalúa todos los valores de la derecha y luego realiza la operación de asignación, por lo que podemos intercambiar los valores de las variables de esta manera:
x, y = y, x -- swap 'x' for 'y' a[i], a[j] = a[j], a[i] -- swap 'a[i]' for 'a[j]'
Cuando el número de variables y el número de valores no coinciden, Lua siempre toma como base el número de variables y adopta la siguiente estrategia:
a. 变量个数 > 值的个数 按变量个数补足nil b. 变量个数 < 值的个数 多余的值会被忽略
Ejemplo
print(a,b,c) --> 0 1 nil
a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a,b) --> 1 2
a, b, c = 0
print(a,b,c) --> 0 nil nil
El último ejemplo anterior es un caso de error común. Nota: si se asignan valores a múltiples variables, se debe asignar un valor a cada variable por separado.
a, b, c = 0, 0, 0 print(a,b,c) --> 0 0 0
La asignación múltiple se usa a menudo para intercambiar variables o para asignar los valores devueltos por una función a variables:
a, b = f()
f() devuelve dos valores, el primero se asigna a a, el segundo a b.
Se deben usar variables locales siempre que sea posible; hay dos ventajas:
- 1. Evitar conflictos de nombres.
- 2. El acceso a las variables locales es más rápido que el acceso a las variables globales.
Indexación
Para la indexación de tablas se utilizan corchetes []. Lua también proporciona el operador .
t[i] t.i -- 当索引为字符串类型时的一种简化写法 gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
Ejemplo
> site["key"] = "www.example.com"
> print(site["key"])
www.ejemplo.com
> print(site.key)
www.ejemplo.com