3.2 変数

変数 (variable) は値を保存する場所です。Lua の変数にはグローバル変数・ローカル変数・テーブルフィールドの三種類があります。

単一の名前はグローバル変数またはローカル変数を表します (関数のパラメータも表しますが、これはローカル変数の一種です)。

var ::= Name

Name は識別子を表します (§ 3.1)。

ローカルと明示的に宣言しない限り変数は全てグローバルです。ローカル変数は字句スコープ (lexically scoped) であり、ローカル変数には同じスコープで定義された関数からもアクセスできます (§ 3.5)。

変数に最初に値を代入するまで、その値は nil です。

角括弧は添え字を使ったテーブルへのアクセスに使われます:

var ::= prefixexp ‘[’ exp ‘]

テーブルへのアクセスの意味はメタテーブルで変更できます (§ 2.4)。

var.Namevar["Name"] の糖衣構文です:

var ::= prefixexp ‘.’ Name

グローバル変数 x へのアクセスは _ENV.x と等価です。チャンクのコンパイル方法により、変数 _ENV はグローバルとなることはありません (§ 2.2)。