我在文件中有一些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)來獲得你想要的。只要注意,現在你只有一個閉包,它改變了它的環境,而不是多個閉包。 –