3
讓我們假設我有一個模塊:LUA環境和模塊
-- 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"))
我想實現的是從env.resolve()
沙箱()將使用環境中的自定義_resolve_path函數。它看到該環境不適用於從沙盒函數調用的代碼。我們的目標是根據它們被調用的位置來表達一些模塊的行爲方式。例如。使用具有不同本地_resolve_path()函數的沙箱{1,2,3}()。
是否有解決方案,使這項工作對其他的方法也叫env.resolve()。假設你有env.load(),env.write()那些現在看不到反彈env.resolve()函數:/ – ensonic