式
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 `)´数値とリテラル・ストリングについては『字句の規則』で説明しました。変数については『変数』で説明しました。関数定義については『関数定義』で説明します。関数呼び出しについては『関数呼び出し』で説明します。表コンストラクターについては『表コンストラクター』で説明します。3 つのドット (「...」) で表される可変引数式は、可変引数関数の中で直接使用できるのみです。これについては『関数定義』に説明しています。
2 項演算子には、算術演算子 (『算術演算子』を参照)、関係演算子 (『関係演算子』を参照)、論理演算子 (『論理演算子』を参照)、および連結演算子(『連結』を参照) があります。単項演算子には、単項マイナス (『算術演算子』を参照)、単項 not (『論理演算子』を参照)、および単項長さ演算子 (『長さ演算子』を参照) があります。
関数呼び出しと可変引数式の両方とも、結果は複数の値にすることができます。式がステートメントとして使用された場合 (これは関数呼び出しに対してのみ可能、『優先順位』を参照)、その戻りリストはゼロ個のエレメントに調整され、そのため、すべての戻り値は破棄されます。式が、式リストの最後 (または唯一) のエレメントとして使用された場合、(呼び出しが括弧で囲まれた場合を除いて) 調整は行われません。他のすべてのコンテキストで Lua は、 最初の値以外のすべてを破棄して、結果リストを 1 つのエレメントに調整します。
以下にいくつかの例を示します。
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
-- is no corresponding vararg parameter)
a,b,c = x, f() -- 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括弧で囲まれた式は常にただ 1 つの値の結果になります。したがって、たとえ f が複数の値を返しても、(f(x,y,z)) は常に単一値です。((f(x,y,z)) の値は、f が返す最初の値であるか、f が値を返さない場合は null です。)