- 3.2 – 变量
3.2 – 变量
变量是储存值的地方。Lua 中有三种变量:全局变量、局部变量和表的域。
单个名字可以指代一个全局变量也可以指代一个局部变量(或者是一个函数的形参,这是一种特殊形式的局部变量)。
- var ::= Name
名字指 §3.1 中定义的标识符。
所有没有显式声明为局部变量(参见 §3.3.7)的变量名都被当做全局变量。局部变量有其 作用范围 :局部变量可以被定义在它作用范围中的函数自由使用(参见§3.5)。
在变量的首次赋值之前,变量的值均为 nil。
方括号被用来对表作索引:
- var ::= prefixexp ‘[’ exp ‘]’
对全局变量以及表的域之访问的含义可以通过元表来改变。 以索引方式访问一个变量 t[i]
等价于调用 gettable_event(t,i)
。(参见 §2.4 ,有一份完整的关于gettable_event
函数的说明。这个函数并没有在 lua 中定义出来,也不能在 lua 中调用。这里我们把提到它只是方便说明问题。)
var.Name
这种语法只是一个语法糖,用来表示var["Name"]
:
- var ::= prefixexp ‘.’ Name
对全局变量 x
的操作等价于操作_ENV.x
。由于代码块编译的方式,_ENV
永远也不可能是一个全局名字 (参见 §2.2)。