Я работаю над кодом 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.Когда я заменяю функцию новой среды, она редактирует старую.Как я могу предотвратить это?