我正在研究一些Lua代码,可以在其中作为自定义环境调用沙箱函数。我需要创建_ENV的副本,在其中修改函数,并使用新环境运行一个函数。到目前为止,我有这个:
new_env = _ENV
function newIoOpen(f,m)
print("Function is opening file "..f)
return io.open(f,m)
end
new_env.io.open = newIoOpen
function testFunction()
io.open("bar.txt","r") -- should print: "Function is opening file bar.txt"
end
io.open("foo.txt","r") -- should stay silent
setfenv(testFunction,new_env)
testFunction()
相反,常规的io.open调用显示“函数正在打开文件foo.txt”并再次调用自身。与函数的io.open相同。当我替换新环境的功能时,它将编辑旧环境。如何防止这种情况发生?