Expressões
Aprenda sobre as expressões básicas em Lua.
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.
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)