Demand loading and executing code in a global environment.
, (Lua >= 5.2):
-- example.lua
my_global = 42
local sandbox
do
local _ENV = { require = require, print = print }
function sandbox()
print('<sandbox> my_global =', my_global)
require 'example_module'
end
end
print('<global> my_global =', my_global)
sandbox()
print('<global> my_global =', my_global)
, my_global:
-- example_module.lua
print('<module> my_global =', my_global)
my_global = nil
, require print. my_global.
, :
$ lua example.lua
<global> my_global = 42 -- The global environment, Ok.
<sandbox> my_global = nil -- Inside the sandbox, Ok.
<module> my_global = 42 -- Inside the sandbox, but loaded with require. Whoops, we have access to the global environment.
<global> my_global = nil -- The module changed the value and it is reflected in the global environment.
.