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)。