Lua を埋め込み、スクリプトがグローバル テーブルを読み取れるようにするが、自動的に書き込むことはできないようにしたいので、2 つのスクリプトが同じ名前の変数を書き込めるようにします。これよりもうまく説明することはできません:
スクリプト 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;
}