Как удалить переменную из дочернего скриптового окружения в lua?

У меня есть скрипт, который я загружаю с loadfile а затем запустить его. Также у меня есть переменная love в рамках родительского сценария Луа, и я хочу, чтобы эта переменная nil внутри дочернего сценария enivornment но все остальное нетронутым (print, math, pairs, все стандартные библиотеки Lua). Как я могу это сделать?

Это не работает:

local scenario = love.filesystem.load(script)
local env = {}
setmetatable(env, { __index = _G })
env.love = nil
env.game = Game
setfenv(scenario, env)

2 ответа

Решение

Ваш код не работает, потому что env наследуется от _G так что env.love разрешено в _G, настройка env.love = nil не добавляет love вход в env,

Задавать env.love = false или же env.love = {},

local scenario = love.filesystem.load(script)
local env = setmetatable({}, { __index = 
   function(t, k)
      if k == "love" then
         return nil
      else
         return _G[k]
      end
   end
})
setfenv(scenario, env)
Другие вопросы по тегам