私はモジュールを持っていると仮定しましょう: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.resolve()関数が表示されないenv.load()、env.write()があるとしましょう:/ – ensonic