我想製作一個封裝器,它可以定期加載腳本,但在加載另一個腳本之前刪除以前的腳本數據,加載的腳本應該可以訪問除某些函數之外的所有全局函數,如「print」還應該修改一些功能行爲。 目前我有這樣的代碼:當我想加載一個新的腳本Lua沙盒加載許多腳本
local _print = print
local _globalFunc = globalFunc
local env = {}
function newEnviorment()
env = _G
env.globalFunc = function() end
env.print = function (msg)
_print('Wrapper says: '.. msg)
end
env.Somefunc = function() end
end
function loadScript (script)
local loaded = loadstring(script)
if loaded then
setfenv(loaded, env)
local ex = pcall(loaded)
end
end
,我調用這兩個函數,有什麼不對的代碼,如預期這是行不通的。
你能提供預期的行爲嗎?目前您的代碼將覆蓋'_G'對象的屬性 –
我想刪除由腳本創建的變量,一旦創建新環境。 ,我想阻止腳本訪問我創建的下劃線標誌的功能。 – Mostafa
因此,請嘗試使用Egor Skriptunoff答案 - 而不是'env = _G'爲您需要的每個環境創建新對象 –