如何从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)
您的代码不起作用,因为从_G
env
继承等env.love
在_G
解决。设置env.love = nil
不会将love
条目添加到env
。
Set env.love = false
or 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)
请注意,'setfenv' [在Lua 5.2中被删除](https://www.lua.org/manual/5.2/manual.html#8.2)。 – ComicSansMS
@ComicSansMS - 这个问题是关于Lua 5.1的,因为作者在他的代码中使用了这个函数(看这个作者以前的问题)。 –
@EgorSkriptunoff同意,我只是在未来有人在这个问题上磕磕绊绊的时候添加了评论,并想知道为什么你的答案对他们不起作用。 – ComicSansMS
为什么将它设置为'nil'不会添加它? –
设置为'nil'将删除表中的条目。 – lhf
但它没有 - 子脚本仍然可以在它的范围内使用“爱”。 –