如何从lua中的子脚本环境中移除一个变量?

问题描述:

我有一个脚本,我加载loadfile然后运行它。此外,我有变量love在父lua脚本的范围内,我想这个变量是nil里面的子脚本enivornment但其他一切都没有触动(print,math,pairs,所有的Lua的标准库)。我怎样才能做到这一点?如何从lua中的子脚本环境中移除一个变量?

这不起作用:

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

您的代码不起作用,因为从_Genv继承等env.love_G解决。设置env.love = nil不会将love条目添加到env

Set env.love = false or env.love = {}

+0

为什么将它设置为'nil'不会添加它? –

+0

设置为'nil'将删除表中的条目。 – lhf

+0

但它没有 - 子脚本仍然可以在它的范围内使用“爱”。 –

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) 
+0

请注意,'setfenv' [在Lua 5.2中被删除](https://www.lua.org/manual/5.2/manual.html#8.2)。 – ComicSansMS

+0

@ComicSansMS - 这个问题是关于Lua 5.1的,因为作者在他的代码中使用了这个函数(看这个作者以前的问题)。 –

+0

@EgorSkriptunoff同意,我只是在未来有人在这个问题上磕磕绊绊的时候添加了评论,并想知道为什么你的答案对他们不起作用。 – ComicSansMS