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

原文地址:https://www.cnblogs.com/littlethank/p/2615731.html