所以我对 Lua 中的全局默认样式感到恼火。我正在尝试编写一个程序,该程序将使在它之后运行的所有程序都无法创建全局变量。当他们尝试时,该变量将设置为该程序的功能环境。我想出了这个,它似乎可以工作,但由于某种原因,在 ComputerCraft rom/programs/edit 的 [edit: 9] 中抛出了一个错误。当我运行一个测试程序时,
a = 1
print(a)
它工作正常并阻止创建全局变量,同时仍然允许该程序访问它,但它不适用于其他程序。我试过做 _G.a、local a 和其他事情,但它们都有效。有谁知道为什么它可能不适用于其他程序?
local oldload = loadfile
function _G.loadfile(str)
local func = oldload(str)
local env = {}
env._G = env
setmetatable(env, {__index = _G, __newindex =
function(table, var, val)
rawset(env, var, val)
end})
setfenv(func, env)
return func
end