在lua中有三种变量:全局变量,局部变量,table域。
一个单一名字可以表示一个全局变量,也可以表示一个局部变量(或者是一个函数的参数,这是一种特殊形式的局部变量)
例如: name; 此处name为全局变量,没有任何修饰的定义
任何变量都被假定为全局变量,除非是以local修饰的定义。
局部变量有其作用范围:局部变量可以被定义在它作用范围中的函数自由使用,在变量首次赋值之前,变量值均为nil
例如:
function testFunc()
local name; --此处的name使用local修饰,则name为局部变量,作用范围为当前函数。此处并未给变量name赋任何值,
--其变量值为nil
end
方括号被用来对table作索引:对全局变量以及table域的访问可以通过metatable(元表)来改变。取一个变量下标指向的量t[i]等价调用
gettable_event(t, i)。(此处的函数使用会在后面的章节详细介绍)
所有的全局变量都放在一个特定的lua table的诸个域中,这个特定的table叫作environment(环境)table或者简称为环境。每个函数
都有对一个环境的引用,所以一个函数中可见的所有全局变量都放在这个函数所引用的环境表中。当一个函数被创建出来,它会从
创建它的函数中继承其环境,你可以调用getfenv取得其环境。如果想改变环境,可以调用setfenv。
对于一个全局变量x的访问等价于_env.x,而这又等价于gettable_event(_env, "x"),此处的_env是当前运行的函数环境。
本章所提到的一些函数,会在之后的章节进行详解。
本文参考lua手册 http://www.lua.org/manual/5.3/manual.html