初版はLua 5.0向けに書かれました。最新バージョンでもほとんど関連性がありますが、いくつかの違いがあります。
第4版ではLua 5.3を対象にしており、Amazonや、その他の書店で購入できます。
本の購入によってLuaプロジェクトをサポートすることにもなります。


4.1 – 代入

代入は、変数またはテーブルフィールドの値を変更する基本的な手段です。

    a = "hello" .. "world"
    t.n = t.n + 1

Luaでは複数代入が可能です。これは、一連の値を一連の変数に1ステップで代入することです。両方のリストの要素はコンマで区切ります。たとえば、次の代入の場合、

    a, b = 10, 2*x
変数aには値10が、bには2*xが代入されます。

複数代入の場合、Luaは最初にすべての値を評価し、その後で代入を実行します。したがって、複数代入を使用して次の例のように2つの値を入れ替えることができます。

    x, y = y, x                -- swap `x' for `y'
    a[i], a[j] = a[j], a[i]    -- swap `a[i]' for `a[j]'

Luaは常に値の数を変数の数に調整します。値のリストが変数のリストより短い場合、余分な変数の値はnilになります。値のリストが長い場合、余分な値は無視されます。

    a, b, c = 0, 1
    print(a,b,c)           --> 0   1   nil
    a, b = a+1, b+1, b+2   -- value of b+2 is ignored
    print(a,b)             --> 1   2
    a, b, c = 0
    print(a,b,c)           --> 0   nil   nil
上記の例の最後の代入は、よく見られる間違いを示しています。変数のセットを初期化するには、各変数に値を指定する必要があります。
    a, b, c = 0, 0, 0
    print(a,b,c)           --> 0   0   0

実際、先の例のほとんどは多少人為的です。私は、複数の代入を行って1行に複数の代入を記述することはめったにありません。しかし、複数代入が本当に必要な場面は数多くあります。2つの値を入れ替えるという例はすでに見てきました。より頻繁に使用されるのは、関数呼び出しから複数の戻り値を収集する場合です。後で詳しく説明しますが、関数呼び出しでは複数の値を返すことができます。このような場合、1つの式で複数の変数の値を指定できます。たとえば、次の代入の場合、

    a, b = f()
f()は2つの結果を返します。aには最初を取得し、bには2番目を取ります。