Valores e tipos

Lua é uma linguagem tipada dinamicamente. Isso significa que as variáveis não têm tipos; somente os valores têm. Não há definições de tipo na linguagem. Todos os valores têm seu próprio tipo.

Todos os valores em Lua são valores de primeira classe. Isso significa que todos os valores podem ser armazenados em variáveis, passados como argumentos para outras funções e retornados como resultados.

Há seis tipos básicos no nzLua: nulo, booleano, número, string, função e tabela.

Null é o tipo do valor nulo, cuja principal propriedade é ser diferente de qualquer outro valor; ele geralmente representa a ausência de um valor útil. O analisador Lua foi estendido para o nzLua para que a palavra-chave null seja equivalente à palavra-chave Lua padrão nil. Diferentemente de um valor NULL no SQL, null (e nil) é igual a si mesmo, portanto null == null retorna verdadeiro.

Boolean é o tipo dos valores false e true. Tanto null quanto false tornam uma condição falsa; qualquer outro valor a torna verdadeira.

Número representa números reais (ponto flutuante de precisão dupla).

String representa matrizes de caracteres. Lua é limpa em 8 bits: as cadeias de caracteres podem conter qualquer caractere de 8 bits, inclusive zeros embutidos ('\0').

A tabela de tipos implementa matrizes associativas, ou seja, matrizes que podem ser indexadas não apenas com números, mas com qualquer valor (exceto nulo). As tabelas podem ser heterogêneas, ou seja, podem conter valores de todos os tipos (exceto nulos). As tabelas são o único mecanismo de estruturação de dados em Lua; elas podem ser usadas para representar matrizes comuns, tabelas de símbolos, conjuntos, registros, gráficos, árvores etc. Para representar

lua usa o nome do campo como um índice. A linguagem oferece suporte a essa representação fornecendo ' a.name como um recurso sintático paraa[" 'name '"]. Há várias maneiras convenientes de criar tabelas em Lua.

Assim como os índices, o valor de um campo de tabela pode ser de qualquer tipo (exceto nulo). Em particular, como as funções são valores de primeira classe, os campos da tabela podem conter funções. Assim, as tabelas também podem conter métodos.

Os valores de tabelas e funções são objetos: as variáveis não contêm de fato esses valores, apenas referências a eles. A atribuição, a passagem de parâmetros e os retornos de funções sempre manipulam referências a esses valores; essas operações não implicam em nenhum tipo de cópia.