首页 > 代码库 > Chapter 14_3 非全局的环境
Chapter 14_3 非全局的环境
关于“环境”的一大问题在于它是全局的,任何对它的修改都会影响程序的所有部分。
例如:若安装一个元表用于控制全局变量的访问,那么整个程序都必须遵循这个规范。
当使用某个库时,没有先声明就使用了全局变量,那么这个程序就无法运行。
在Lua中,全局变量并不需要一定是全局的。甚至可以说Lua没有全局变量。
比如在下面的例子中,var1和var2 就是两个自由名:
var1 = var2 + 3
就像之前我们说的,一个自由名不会涉及到一个全局变量,至少不会显示地涉及到。
此外,Lua解释器会把所有的自有名翻译为_ENV.var。因此上面的代码可以这样表示:
_ENV.var1 = _ENV.var2 + 3
Lua将所有的代码块当作匿名函数。Lua编译器在编译代码块的时候是这样的:
local _ENV = <some value>return function(...) _ENV.var1 = _ENV.var2 + 3end
看上去,这样去操作全局变量挺费解的。但是其实是最简单灵活的方式,但是实现起来有点困难。
总结一下在Lua5.2中操作全局变量的情况:
1>Lua把上值域中的代码块当作 _ENV
2>Lua编译器把所有的free name var 当作 _ENV.var
3>load 或loadfile函数 用全局环境去初始化代码块中的第一个upvalue。
这节有点没有懂,以后回来再好好看看。
以上内容来自:《Lua程序设计第二版》和《Programming in Lua third edition》
Chapter 14_3 非全局的环境
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。