変数

変数は値を格納する場所です。Lua には、グローバル変数、ローカル変数、表フィールドの 3 種類の変数があります。

単一の名前は、グローバル変数またはローカル変数 (あるいは、ある特定のローカル変数である、関数の仮パラメーター) を表すことができます。

var ::= Name

字句の規則』に定義されているように、名前は ID を表します。

明示的にローカルと宣言されない限り、変数はグローバルとみなされます (『ローカル宣言』を参照)。ローカル変数は、字句単位スコープ を持ちます。そのスコープ内で定義された関数から自由にアクセスできます (『可視規則』を参照)。

最初の代入が行われる前の変数の値は null です。

表にインデックスを付けるためには、角括弧が使用されます。

var ::= prefixexp `[´ exp `]´

構文 var.Namevar["Name"] の単なる糖衣構文です。

var ::= prefixexp `.´ Name

すべてのグローバル変数は、環境表 または単に環境 と呼ばれる、通常の Lua 表内のフィールドとして存在します。各関数はそれぞれ独自に環境への参照を持つため、この関数内でのすべてのグローバル変数は、この環境表を参照します。関数が作成されるとき、関数は、その関数を作成した関数から環境を継承します。Lua 関数の環境表を取得するには、getfenv を呼び出します。環境表を置き換えるには、setfenv を呼び出します。

グローバル変数 x へのアクセスは、_env.x と同等です。ここで、_env は実行する関数の環境です。(_env 変数は Lua ではアクセス可能ではありません。それをここで使用したのは説明のためだけです。)