我在文件中有一些lua代码。我想创建这个代码的多个闭包实例,每个实例都有一个不同的_ENV upvalue。我可以使用luaL_loadfile加载文件,并使用不同的表设置第一个upvalue N次,以创建N个实例。但是这不会加载和编译N次?Lua创建多个闭包实例
的LUA相当于什么,我想要做的是下面的,只是没有使用loadFile
func_list = {}
for i = 1, 10 do
local new_env = {hello=i, print=print}
func_list[i] = loadfile("Code.lua", "t", new_env)
end
for i = 1, 10 do
func_list[i]()
end
------ Code.lua ------
print(hello*hello)
有没有更好的方式来做到这一点?
是不是指for循环中的'code(new_env); func_list [i] = new_env'。 – z33m
此外,不要将'_ENV = ...'附加到代码中。 DeadMG的建议也应该正确吗?即。在执行块之前将第一个upvalue设置为new_env – z33m
感谢您的评论,我解决了这个问题。关于第二个问题 - 你可以使用[这个实现'setfenv' for Lua 5.2](http://lua-users.org/lists/lua-l/2010-06/msg00313.html)来获得你想要的。只要注意,现在你只有一个闭包,它改变了它的环境,而不是多个闭包。 –