Я встроил 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;
}