代入

Lua では多重代入が許可されています。したがって、代入の構文では、左辺に変数リスト、右辺に式リストを定義します。どちらのリストもそれぞれのエレメントをコンマで区切ります。

stat ::= varlist `=´ explist
varlist ::= var {`,´ var}
explist ::= exp {`,´ exp}

式については、『』で説明しています。

代入の前に、値リストは変数リストの長さに調整 されます。必要な数よりも値が多ければ、余分な値は捨てられます。必要な数よりも値が少なければ、 必要なだけ null がリストに追加されます。式リストの最後が関数呼び出しであれば、 調節の前に、その呼び出しによって返されたすべての値が値リストに追加されます (ただし呼び出しが括弧で囲まれている場合を除く。『』を参照)。

代入ステートメントは、まずすべての式を評価し、その後でのみ代入が実行されます。したがって次のコードでは、

     i = 3
     i, a[i] = i+1, 20

i に 4 が代入される前に a[i]i が (3 に) 評価されるため、a[3] に 20 が代入されます。a[4] に影響はありません。同様に、次の行では、

     x, y = y, x

xy の値が交換されます。次の行では、

     x, y, z = y, z, x

xy、および z の値の順序が循環的に変わります。

グローバル変数への代入 x = val は、 代入 _env.x = val と同等です。ここで、_env は実行する関数の環境です。(_env 変数は Lua では定義されません。それをここで使用したのは説明のためだけです。)