摘要: 关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分。 例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范。 当使用某个库时,没有先声明就使用了全局变量,那么这个程序就无法运行。 在Lua中,全局变量并不需要一定是全局的。甚至可以说Lua没有全局变量。 阅读全文
posted @ 2016-09-08 19:59 daiker 阅读(110) 评论(0) 推荐(0) 编辑
摘要: Lua中的全局变量不需要声明就可以使用。对于小程序十分方便,但是大型程序中 一处简单的笔误就可能造成难以发现的bug。 不过,这种性能可以改变。由于Lua将全局变量放在一个普通的table中,可以通过元表来改变其访问全局变量时的行为。 一种方法是简单地检测所有对全局table中不存在key的访问: 阅读全文
posted @ 2016-09-08 19:20 daiker 阅读(199) 评论(0) 推荐(0) 编辑
摘要: Lua将其所有的全局变量保存在一个常规的table中,称为“global environment”。 Lua将环境table自身保存在一个全局变量_G中,_G._G等于 _G . 比如下面的代码打印出_G中所有的全局变量: 具有动态名字的全局变量 对于访问和设置全局变量,通常赋值操作就可以了。不过, 阅读全文
posted @ 2016-09-08 17:43 daiker 阅读(145) 评论(0) 推荐(0) 编辑
摘要: __index和__newindex都是在table中没有所需访问的index时才发挥作用。 因此,只有将一个table保持为空,才有可能捕捉到所有对它的访问。为了监视一个table的所有访问,就应该为真正的table创建一个代理。 这个代理就是一个空的table,其中__index和__newin 阅读全文
posted @ 2016-09-08 11:05 daiker 阅读(208) 评论(0) 推荐(0) 编辑