У меня есть код lua в файле. Я хочу создать несколько экземпляров закрытия этого кода, каждый из которых имеет значение _ENV. Я могу использовать 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)
есть лучший способ сделать это?
Вы имели в виду 'code (new_env); func_list [i] = new_env' в цикле for. – z33m
Кроме того, вместо добавления '_ENV = ...' в код. Предложение DeadMG также должно работать правильно? то есть. установив первое upvalue на new_env перед выполнением chunk – z33m
Спасибо за комментарий, я исправил это. Что касается второго вопроса, вы можете использовать [эту реализацию 'setfenv' для Lua 5.2] (http://lua-users.org/lists/lua-l/2010-06/msg00313.html), чтобы получить то, что вы хотите. Просто обратите внимание, что теперь у вас есть только одно закрытие, которое меняет свою среду, а не многократное закрытие. –