【发布时间】:2017-04-16 17:46:37
【问题描述】:
假设我有一个模块:
-- env.lua
local env = {}
function env.resolve(str)
print("mod", _ENV)
if _resolve_path ~= nil then
return _resolve_path(str)
else
error("bad env")
end
end
return env
以及一些使用它的代码:
-- sandbox demo
-- run as: lua env-test.lua
env = require('env')
function _resolve_path(path)
return "/" .. path
end
print("before main()")
print("", _ENV)
print("", env.resolve("test"))
local sandbox
do
local _ENV = {
print = print,
env = env,
_resolve_path = function (path)
return "/chroot/" .. path
end
}
function sandbox()
print("from sandbox()")
print("", _ENV)
print("", env.resolve("test"))
end
end
sandbox()
print("after main()")
print("", _ENV)
print("", env.resolve("test"))
我想要实现的是,来自 sandbox() 的 env.resolve() 将使用环境中的自定义 _resolve_path 函数。它看到该环境并未应用于从沙盒函数调用的代码。目标是根据调用它们的位置来增强某些模块的行为方式。例如。具有具有不同本地 _resolve_path() 函数的沙箱{1,2,3}()。
【问题讨论】: