我嵌入了 Lua 并希望脚本能够读取全局表但不能自动写入它,因此两个脚本可以写入具有相同名称的变量而不会相互覆盖但仍然能够向全局表添加内容。我真的不能更好地解释它:
脚本 1
var1 = "foo"
_G.var2 = "bar"
脚本 2
print(var1) -- Prints nil
print(var2) -- Prints 'bar'
我试图通过做这样的事情来实现这一点(“脚本”是一个函数)
newScript = function(content)
Script = loadstring(content)()
env = setmetatable({},{__index = _G})
setfenv(Script,env)
return Script
end
我的 Lua 绑定是 LuaJ,为了在此处提供所有信息,该代码也是:
private LuaValue newScript(String content){
LuaTable envMt = new LuaTable();
envMt.set(INDEX, _G);
LuaTable env = new LuaTable();
env.setmetatable(envMt);
LuaClosure func = (LuaClosure) _G.get("loadstring").call(valueOf(content));
thread = new LuaThread(func,env);
thread.resume(NIL);
return thread;
}