执行以下Lua
代码:
i = 32
local i = 0
f = load("i = i + 1; print(i)")
g = function () i = i + 1; print(i) end
f() --> 33
g() --> 1
f()
输出33
,g()
输出1
。原因是第一个i
是全局变量,第二个i
是local
变量,而同名的local
变量总是覆盖掉全局变量。load
产生的函数只能看到全局变量,因此f()
输出33
。如果想让g()
函数访问全局变量i
,可以利用全局环境变量_G
:
g = function () _G.i = _G.i + 1; print(_G.i) end
g() --> 34