这是错误还是功能? 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 而言,无论您现在身在何处,缺少 loadenv 参数都会将加载的块连接到非常全局的环境。

如果想让5.2中加载的源默认继承新环境,替换load / loadfile函数:

e.load = function (ld, src, mode, env)
    return load(ld, src, mode, env or e)
end