Expressões

Aprenda sobre as expressões básicas em Lua.

As expressões básicas em Lua são as seguintes:
exp ::= prefixexp
exp ::= nil | null | false | true
exp ::= Number
exp ::= String
exp ::= function
exp ::= tableconstructor
exp ::= `...´
exp ::= exp binop exp
exp ::= unop exp
prefixexp ::= var | functioncall | `(´ exp `)´

As expressões vararg, indicadas por três pontos (...), só podem ser usadas quando estiverem diretamente dentro de uma função vararg.

Os operadores binários incluem operadores aritméticos, operadores relacionais, operadores lógicos e o operador de concatenação. Os operadores unários compreendem o unário menos, o unário ' não e o unário ' operador de comprimento.

Tanto as chamadas de função quanto as expressões de vararg podem resultar em vários valores. Se uma expressão for usada como uma instrução, o que só é possível para chamadas de função, sua lista de retorno será ajustada para zero elementos, descartando assim todos os valores retornados. Se uma expressão for usada como o último (ou o único) elemento de uma lista de expressões, nenhum ajuste será feito (a menos que a chamada esteja entre parênteses). Em todos os outros contextos, Lua ajusta a lista de resultados para um elemento, descartando todos os valores, exceto o primeiro.

Exemplos:
f()       -- adjusted to 0 results
g(f(), x)       -- f() is adjusted to 1 result
g(x, f())       -- g gets x plus all results from f()
a,b,c = f(), x  -- f() is adjusted to 1 result (c gets null)
a,b = ...       -- a gets the first vararg parameter, b gets
                -- the second (both a and b can get null if there
a,b,c = x, f()  -- is no corresponding vararg parameter
                -- f() is adjusted to 2 results
a,b,c = f()     -- f() is adjusted to 3 results
return f()      -- returns all results	from f()
return ...      -- returns all received vararg parameters
return x,y,f()  -- returns x, y, and all results from f()
{f()}           -- creates a list with all results from f()
{...}           -- creates a list with all vararg parameters
{f(), null}     -- f() is adjusted to 1 result

Qualquer expressão entre parênteses sempre resulta em apenas um valor. Assim, ' (f(x,y,z)) é sempre um valor único, mesmo que ' f retorne vários valores. (O valor de ' (f(x,y,z)) é o primeiro valor retornado por ' f ou nulo se ' f não retornar nenhum valor)