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

我有一个使用 loadfile 加载并运行的脚本。同时,在父 Lua 脚本的作用域中,我有一个名为 love 的变量。我希望在子脚本环境中,这个变量被设置为 nil,而其他所有东西都保持不变(如 printmathpairs,以及 Lua 的所有标准库)。我应该怎么做呢?

这种方法行不通:

local scenario = love.filesystem.load(script)
local env = {}
setmetatable(env, { __index = _G })
env.love = nil
env.game = Game
setfenv(scenario, env)
点赞
用户6834680
用户6834680
本地情境 = 爱文件系统.载入(脚本)
本地环境 = 设置元表({}, { __index =
   function(t, k)
      if k == "爱" then
         返回 空
      else
         返回 _G[k]
      end
  end
})
设置环境(本地情境, 本地环境)
2017-10-06 13:08:50
用户107090
用户107090

您的代码无法正常工作,因为 env 继承自 _G,因此 env.love_G 中得到解析。将 env.love = nil 设置为 falseenv.love = {} 则不会将 love 条目添加到 env

2017-10-06 13:22:28