English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

变量 Lua

Antes de usar una variable, debe declararse en el código, es decir, crear la variable.

Antes de ejecutar el código, el compilador necesita saber cómo asignar un área de almacenamiento para las variables de la instrucción, para almacenar los valores de las variables.

Las variables en Lua tienen tres tipos: variables globales, variables locales y dominios de la tabla.

En Lua, todas las variables son variables globales, incluso dentro de bloques de instrucciones o funciones, a menos que se declaren explícitamente como variables locales con local.

El ámbito de una variable local es desde la posición de declaración hasta el final del bloque de instrucciones en el que se encuentra.

El valor predeterminado de todas las variables es nil.

-- Script de 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           -- Reasignación de variables locales
    print(a, b);     --> 6 6
end
print(a, b)      --> 5 6

El resultado de ejecutar el ejemplo anterior es:

$ lua test.lua 
5    nil
6    6
5    6

Instrucción de asignación

La asignación es el método más básico para cambiar el valor de una variable y modificar los dominios de la tabla.

a = "hello" .. "world"
t.n = t.n + 1

Lua puede asignar múltiples variables simultáneamente, y los elementos de la lista de variables y la lista de valores se separan por comas. Los valores a la derecha de la instrucción de asignación se asignan sucesivamente a las variables a la izquierda.

a, b = 10, 2*x <--> a =10; b =2*x

Al encontrar una instrucción de asignación, Lua primero calcula todos los valores a la derecha y luego ejecuta la operación de asignación, por lo que podemos intercambiar los valores de las variables de la siguiente 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 adopta la siguiente estrategia en función del número de variables:

a. El número de variables > El número de valores  Se completará con nil según el número de variables
b. El número de variables < El número de valores  Los valores adicionales se ignorarán
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, preste atención: si debe asignar a múltiples variables, debe asignar a cada variable en orden.

a, b, c = 0, 0, 0
print(a, b, c)             --> 0  0  0

La asignación múltiple se utiliza a menudo para intercambiar variables o asignar el retorno de una función a variables:

a, b = f()

f() devuelve dos valores, el primero se asigna a a, el segundo a b.

Debería usar variables locales lo más posible, lo que tiene dos beneficios:

  • 1. Evitar conflictos de nombres.

  • 2. La velocidad de acceso a variables locales es más rápida que la de variables globales.

índice

Se utiliza corchetes [] para índices de table. Lua también ofrece el operador .

t[i]
t.i                 -- es una forma simplificada cuando el índice es de tipo cadena
gettable_event(t,i) -- Acceder a índices mediante esencialmente una llamada a función similar
> site = {}
> site["key"] = "es.oldtoolbag.com"
> print(site["key"])
es.oldtoolbag.com
> print(site.key)
es.oldtoolbag.com