3.2 変数
変数 (variable) は値を保存する場所です。Lua の変数にはグローバル変数・ローカル変数・テーブルフィールドの三種類があります。
単一の名前はグローバル変数またはローカル変数を表します (関数のパラメータも表しますが、これはローカル変数の一種です)。
var ::= Name
Name
は識別子を表します (§ 3.1)。
ローカルと明示的に宣言しない限り変数は全てグローバルです。ローカル変数は字句スコープ (lexically scoped) であり、ローカル変数には同じスコープで定義された関数からもアクセスできます (§ 3.5)。
変数に最初に値を代入するまで、その値は nil です。
角括弧は添え字を使ったテーブルへのアクセスに使われます:
var ::= prefixexp ‘[’ exp ‘]’
テーブルへのアクセスの意味はメタテーブルで変更できます (§ 2.4)。
var.Name
は var["Name"]
の糖衣構文です:
var ::= prefixexp ‘.’ Name
グローバル変数 x
へのアクセスは _ENV.x
と等価です。チャンクのコンパイル方法により、変数 _ENV
はグローバルとなることはありません (§ 2.2)。