这是错误还是功能? Lua@OpenComputers@minecraft
it's a bug or feature? Lua@OpenComputers@minecraft
local e={print=print, load=load, a='2'}
e._G=e
load(
[[
print(a)
load("print(a)")()
]]
, '', '', e)()
--预期结果
2
2
--但实际上
2
1
为什么"load"没有从环境中获取编译块的环境?
http://www.lua.org/manual/5.2/manual.html#pdf-load
If the resulting function has upvalues, the first upvalue is set to the value of env, if that parameter is given, or to the value of the global environment.
即就 _ENV
而言,无论您现在身在何处,缺少 load
的 env
参数都会将加载的块连接到非常全局的环境。
如果想让5.2中加载的源默认继承新环境,替换load
/ loadfile
函数:
e.load = function (ld, src, mode, env)
return load(ld, src, mode, env or e)
end
local e={print=print, load=load, a='2'}
e._G=e
load(
[[
print(a)
load("print(a)")()
]]
, '', '', e)()
--预期结果
2
2
--但实际上
2
1
为什么"load"没有从环境中获取编译块的环境?
http://www.lua.org/manual/5.2/manual.html#pdf-load
If the resulting function has upvalues, the first upvalue is set to the value of env, if that parameter is given, or to the value of the global environment.
即就 _ENV
而言,无论您现在身在何处,缺少 load
的 env
参数都会将加载的块连接到非常全局的环境。
如果想让5.2中加载的源默认继承新环境,替换load
/ loadfile
函数:
e.load = function (ld, src, mode, env)
return load(ld, src, mode, env or e)
end