Как удалить переменную из дочернего скриптового окружения в 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)