3.2 变量

变量是储存值的地方。Lua 中有三种变量:全局变量、局部变量和表的域。

单个名字可以指代一个全局变量也可以指代一个局部变量(或者是一个函数的形参,这是一种特殊形式的局部变量)。

  1. var ::= Name

名字指 §3.1 中定义的标识符。

所有没有显式声明为局部变量(参见 §3.3.7)的变量名都被当做全局变量。局部变量有其 作用范围 :局部变量可以被定义在它作用范围中的函数自由使用(参见§3.5)。

在变量的首次赋值之前,变量的值均为 nil

方括号被用来对表作索引:

  1. var ::= prefixexp [ exp ]

对全局变量以及表的域之访问的含义可以通过元表来改变。 以索引方式访问一个变量 t[i] 等价于调用 gettable_event(t,i)。(参见 §2.4 ,有一份完整的关于gettable_event 函数的说明。这个函数并没有在 lua 中定义出来,也不能在 lua 中调用。这里我们把提到它只是方便说明问题。)

var.Name 这种语法只是一个语法糖,用来表示var["Name"]

  1. var ::= prefixexp . Name

对全局变量 x 的操作等价于操作_ENV.x。由于代码块编译的方式,_ENV 永远也不可能是一个全局名字 (参见 §2.2)。