local e={print=print, load=load, a='2'}
e._G=e
load(
[[
print(a)
load("print(a)")()
]]
, '', '', e)()
- 预期结果
2
2
- 但实际上是
2
1
为什么"加载"没有从环境中获取已编译块的环境?
答案 0 :(得分:1)
http://www.lua.org/manual/5.2/manual.html#pdf-load
如果结果函数具有upvalues,则第一个upvalue设置为env的值,如果给出该参数,或全局环境的值。
即。无论您现在处于_ENV
的哪个位置,env
的{{1}}参数都会将加载的块连接到非常全局的环境。
如果您希望5.2中加载的源默认继承新环境,请替换load
/ load
函数:
loadfile