环境
全局变量在大多数编程语言中是不可或缺的,但同时又很容易出现问题。一方面,使用全局变量会明显地是无关的代码部分纠缠在一起,容易导致代码复杂。另一方面,谨慎使用全局变量又能更好地表达程序中真正的全局概念,此外,像Lua语言这样的动态语言无法区分常量和变量的。虽然全局变量在整个程序中均可见得变量,但由于Lua语言时宿主应用调用代码短的,因此“程序”的概念不明确。
Lua语言通过不使用全局变量的方法来解决这个难题,但又不遗余力地在Lua语言中对全局变量进行模拟。在第一种近似的模拟中,我们可以认为Lua语言把所有的全局变量保存在一个成为全局环境的普通表中。
使用一个表来保存全局变量的优点是简化了Lua语言的内部实现。另一个优点是,可以像操作其他表一样操作这个表。Lua语言将全局环境自身保存在全局变量_ G中。
for n in pairs(_G) do print(n) end
输出全局变量中所有全局变量的名称。
通常,赋值操作对于访问和设置全局变量已经足够了,然而,有时我们想要某种形式的元编程。例如,我们需要操作一个全局变量,而这个全局变量的名称却存储在另一个变量中或者经由运行时计算得到。为了获取这个变量的值,我们可以使用以下代码
value = load("return" .. varname)()
如果varname是x,那