Lua沙盒加载多个脚本

我想制作一个包装器,可以定期加载脚本,但在加载另一个脚本之前,需要删除先前的脚本数据,已加载的脚本应该可以访问所有全局函数,除了一些函数,例如"print",并且它应该修改某些函数的行为。目前,我有以下代码:

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

当我想要加载新脚本时,我调用这两个函数,这个代码有什么问题,因为它不能像预期那样工作。

点赞
用户1847592
用户1847592
# 新的环境

```lua
function newEnvironment()
  env = setmetatable({}, {__index = _G}) -- 创建一个空的 Lua 环境,并将其设置为全局元表的索引
  env.globalFunc = function() end -- 在环境中添加名为 globalFunc 的函数
  env.print = function (msg) -- 在环境中添加名为 print 的函数
    _print('Wrapper says: '.. msg) -- 在函数内部调用 _print 函数并输出带有字符串 "Wrapper says: " 的消息
  end
  env.Somefunc = function() end -- 在环境中添加名为 Somefunc 的函数
end

新的环境函数将创建一个新的环境,并在环境中添加三个函数:globalFunc、print 和 Somefunc。其中,print 函数将输出一个包装器消息,这个消息带有 "Wrapper says: " 字符串。

2017-03-27 10:10:10