初版は Lua 5.0 向けに執筆されましたが、後続バージョンとに大きく関連はありますが、いくつかの違いがあります。
4 版は Lua 5.3 が対象で Amazon や他の書店で購入できます。
本を購入することで、Lua プロジェクトをサポートすることもできます。


2 - 型と値

Lua は動的型付け言語です。この言語では型の定義は存在しません。それぞれの値は自らの型を持っています。

Lua には 8 つの基本型があります。nilbooleannumberstringuserdatafunctionthread、および table です。type 関数は指定の値の型名を返します。

    print(type("Hello world"))  --> string
    print(type(10.4*3))         --> number
    print(type(print))          --> function
    print(type(type))           --> function
    print(type(true))           --> boolean
    print(type(nil))            --> nil
    print(type(type(X)))        --> string
X の値に関係なく、最後の例では "string" が返されます。なぜなら type の結果は常に文字列だからです。

変数には定義済みの型がありません。どの変数でもどの型の値でも含むことができます。

    print(type(a))   --> nil   (`a' is not initialized)
    a = 10
    print(type(a))   --> number
    a = "a string!!"
    print(type(a))   --> string
    a = print        -- yes, this is valid!
    a(type(a))       --> function
最後の 2 行に注目してください。Lua では、関数はファーストクラスの値です。したがって、他の値と同様に操作できます。(詳細については 第 6 章 をご覧ください。)

通常、1 つの変数を異なる型に使用すると、コードが乱雑になります。ただし、この機能を慎重に使用する場面があります。たとえば、通常の戻り値と例外的な条件を区別するために、nil を使用します。