Lua中使用继承来组装新的环境
刚学Lua不久,下面的代码理解了很久,故记录下来,怕忘记了。
a = 1
local newgt = {}
setmetatable(newgt, {__index = _G})
setfenv(1, newgt)
print(a)
print(_G.a)
a = 10
print(a)
print(_G.a)
_G.a = 20
print(a)
print(_G.a)
运行结果:
1
1
10
1
10
20
1、首先,定义了全局变量a,并初始化为1
2、创建新环境 local newgt = {},并继承了全局的环境_G
setmetatable(newgt, {__index = _G})这句语句告诉程序,在找不到变量的时候,到全局_G去找
3、设置环境为newgt
4、在新环境中定义a,不会影响到全局_G中的a
5、改变_G中的a,不会影响到newgt环境中的a