English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua es un lenguaje de tipo dinámico, no es necesario definir el tipo de variable, solo necesita asignar un valor a la variable. Los valores pueden almacenarse en variables, transmitirse como parámetros o devolverse como resultados.
En Lua, hay 8 los tipos de datos básicos son: nil, booleano, número, cadena, datos de usuario, función, hilo y tabla.
tipo de datos | descripción |
---|---|
nil | Este es el más simple, solo el valor nil pertenece a esta categoría, que representa un valor no válido (equivalente a falso en expresiones condicionales). |
boolean | contiene dos valores: falso y verdadero. |
number | representa un número de punto flotante de precisión doble |
string | la cadena se representa con un par de comillas dobles o comillas simples |
función | función escrita en C o Lua |
datos de usuario | representa una estructura de datos C almacenada en una variable |
hilo | representa una línea de ejecución independiente, utilizada para ejecutar programas cooperativos |
tabla | En Lua, la tabla (table) es realmente una "matriz asociativa" (associative arrays), la índice de la matriz puede ser un número, una cadena o un tipo de tabla. En Lua, la creación de una tabla se realiza mediante una "expresión de construcción", la expresión de construcción más simple es {}, que se utiliza para crear una tabla vacía. |
Podemos usar la función type para probar el tipo de una variable o valor dado:
print(type("Hello world")) --> cadena print(type(10.4*3)) --> número print(type(print)) --> función print(type(type)) --> función print(type(true)) --> booleano print(type(nil)) --> nil print(type(type(X))) --> cadena
El tipo nil representa una especie de valor sin valor válido, que tiene solo un valor -- nil, por ejemplo, al imprimir una variable sin asignar, se devuelve un valor nil:
> print(type(a)) nil >
Para las variables globales y las tablas, nil también tiene un efecto de "eliminar", asignar un valor nil a una variable global o a una variable en la tabla de la tabla es equivalente a eliminarlas, ejecutar el siguiente código para ver:
tab1 = { key1 = "val1", key2 = "val2", "val3" } for k, v in pairs(tab1) hacer print(k .. " - " .. v) end tab1.key1 = nil for k, v in pairs(tab1) hacer print(k .. " - " .. v) end
> type(X) nil > type(X)==nil falso > type(X)=='nil' verdadero >
el resultado de type(X)==nil es falso la razón es que type(X) es esencialmente una cadena de "nil", que es un tipo de cadena:
type(type(X))==cadena
El tipo booleano tiene dos valores posibles: true (verdadero) y false (falso), Lua considera false a false y nil, y true a todo lo demás, incluso al número 0:
print(type(true)) print(type(false)) print(type(nil)) if false or nil then print("Al menos uno es true") else print("false y nil son false") end if 0 then print("El número 0 es true") else print("El número 0 es false") end
El resultado de ejecutar el siguiente código es:
$ lua test.lua boolean boolean nil false y nil son false El número 0 es true
Lua tiene solo un tipo de número por defecto -- double (double precisión) tipo (el tipo por defecto se puede modificar en luaconf.h), las siguientes formas se consideran como tipo number:
print(type(2)) print(type(2.2)) print(type(0.2)) print(type(2e+1)) print(type(0.2e-1)) print(type(7.8263692594256e-06))
El resultado de ejecutar el siguiente código es:
number number number number number number
Las cadenas se representan con un par de comillas dobles o simples.
string1 = "this is string1" string2 = 'this is string2'
También se puede usar 2 se utilizan dos corchetes cuadrados "[[]]" para representar "un bloque" de cadena.
html = [[ <html> <head></head> <body> <a href="http://es.oldtoolbag.com/">Tutoriales básicos</a> </body> </html> ]] print(html)El resultado de ejecutar el siguiente código es:
<html> <head></head> <body> <a href="http://es.oldtoolbag.com/">Tutoriales básicos</a> </body> </html>
Cuando Lua realiza una operación aritmética en una cadena de números, intenta convertir esa cadena de números en un número:
> print("2" + 6) 8.0 > print("2" + "6") 8.0 > print("2 + 6") 2 + 6 > print("-2e2" * "6") -1200.0 > print("error" + 1) stdin:1: intento de realizar una operación aritmética en un valor de cadena stack traceback: stdin:1: en main chunk [C]: en? >
El código anterior contiene "error" + 1El ejecutar produjo un error, la concatenación de cadenas utiliza .., por ejemplo:
> print("a" .. 'b') ab > print(157 .. 428) 157428 >
Usar # para calcular la longitud de una cadena de texto, colóquelo antes de la cadena de texto, como en el siguiente ejemplo:
> len = "es.oldtoolbag.com" > print(#len) 14 > print(#"es.oldtoolbag.com) 14 >
En Lua, la creación de una tabla se realiza a través de una "expresión de construcción", la expresión de construcción más simple es {} para crear una tabla vacía. También se puede agregar algunos datos a la tabla y inicializarla directamente:
-- Crear una tabla vacía local tbl1 = {} -- inicialización directa de tabla local tbl2 = {"apple", "pear", "orange", "grape"}
En Lua, una tabla (table) es realmente una "tabla asociativa" (associative arrays), y los índices de los arrays pueden ser números o cadenas de texto.
-- archivo de script table_test.lua a = {} a["key"] = "value" key = 10 a[key] = 22 a[key] = a[key] + 11 for k, v in pairs(a) do print(k .. " : " .. v) end
El resultado de la ejecución del script es:
$ lua table_test.lua key : value 10 : 33
Diferente de otros lenguajes de programación que utilizan 0 como índice inicial de un array, en Lua, el índice inicial por defecto de una tabla generalmente es 1 comienzo.
-- table_test2.lua archivo de script local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end
El resultado de la ejecución del script es:
$ lua table_test2.lua Key 1 Key 2 Key 3 Key 4
La tabla no tiene un tamaño fijo, su longitud aumenta automáticamente cuando se agrega nuevos datos, y todas las tablas sin inicializar son nil.
-- table_test3.lua archivo de script a3 = {} for i = 1, 10 do a3[i] = i end a3["key"] = "val" print(a3["key"]) print(a3["none"])
El resultado de la ejecución del script es:
$ lua table_test3.lua val nil
En Lua,la función se considera como "primer tipo de valor (First-Class Value",la función puede existir en una variable:
-- function_test.lua archivo de script function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) end end print(factorial1(5)) factorial2 = factorial1 print(factorial2(5))
El resultado de la ejecución del script es:
$ lua function_test.lua 120 120
Las funciones pueden pasarse como funciones anónimas (funciones anónimas) a través de parámetros:
-- function_test2.lua archivo de script function testFun(tab,fun) for k, v in pairs(tab) do print(fun(k,v)); end end tab={key1="val1",key2="val2"}; testFun(tab, function(key,val)--Función anónima return key.."="..val; end );
El resultado de la ejecución del script es:
$ lua function_test2.lua key1 = val1 key2 = val2
En Lua, la principal línea de trabajo es la coroutine. Es casi lo mismo que un hilo (thread), tiene su propia pila, variables locales e índice de instrucciones, y puede compartir variables globales y la mayoría de las otras cosas con otras coroutines.
La diferencia entre hilo y coroutine: los hilos pueden ejecutarse simultáneamente, mientras que las coroutines solo pueden ejecutarse una a la vez, y las coroutines en estado de ejecución solo se detienen cuando se suspenden (suspend).
userdata es un tipo de datos personalizado del usuario, utilizado para representar un tipo de datos proporcionado por la aplicación o C/C++ Biblioteca de lenguaje que crea tipos, que puede almacenar cualquier C/C++ de cualquier tipo de datos (generalmente struct y puntero) almacenados en variables de Lua al llamarlos.