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

-- script del archivo test.lua
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 + 1
Lua 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

a, b, c = 0, 1
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 = {}
> site["key"] = "www.example.com"
> print(site["key"])
www.ejemplo.com
> print(site.key)
www.ejemplo.com
Otras extensiones