Valores y tipos
Lua es un lenguaje tipado dinámicamente. Esto significa que las variables no tienen tipos, sólo los valores. No hay definiciones de tipo en el lenguaje. Todos los valores llevan su propio tipo.
Todos los valores en Lua son valores de primera clase. Esto significa que todos los valores pueden almacenarse en variables, pasarse como argumentos a otras funciones y devolverse como resultados.
Existen seis tipos básicos en nzLua: null, boolean, number, string, function y table.
Null es el tipo del valor nulo, cuya principal propiedad es ser diferente de cualquier otro valor; suele representar la ausencia de un valor útil. El analizador sintáctico de Lua ha sido extendido para nzLua de modo que la palabra clave null es equivalente a la palabra clave estándar de Lua nil. A diferencia de un valor NULL en SQL, null (y nil) es igual a sí mismo, por lo que null == null devuelve verdadero.
Boolean es el tipo de los valores false y true. Tanto null como false hacen que una condición sea falsa; cualquier otro valor la hace verdadera.
Number representa números reales (coma flotante de doble precisión).
Las cadenas representan matrices de caracteres. Lua es limpio en 8 bits: las cadenas pueden contener cualquier carácter de 8 bits, incluyendo ceros incrustados ('\0').
La tabla de tipos implementa matrices asociativas, es decir, matrices que pueden indexarse no sólo con números, sino con cualquier valor (excepto null). Las tablas pueden ser heterogéneas, es decir, pueden contener valores de todos los tipos (excepto null). Las tablas son el único mecanismo de estructuración de datos en Lua; pueden usarse para representar arrays ordinarios, tablas de símbolos, conjuntos, registros, gráficos, árboles, etc. Para representar
lua utiliza el nombre del campo como índice. El lenguaje soporta esta representación proporcionando ' a.name como azúcar sintáctico paraa[" 'name '"]. Hay varias maneras convenientes de crear tablas en Lua.
Al igual que los índices, el valor de un campo de tabla puede ser de cualquier tipo (excepto nulo). En particular, dado que las funciones son valores de primera clase, los campos de tabla pueden contener funciones. Así, las tablas también pueden llevar métodos.
Los valores de tablas y funciones son objetos: las variables no contienen realmente estos valores, sólo referencias a ellos. La asignación, el paso de parámetros y la devolución de funciones siempre manipulan referencias a dichos valores; estas operaciones no implican ningún tipo de copia.