Будет ли сборка мусора работать правильно, если функция обращается к таблице, которая содержит саму функцию, т.е.
local lib = { }
function lib.a (x) <something> end
function lib.b (x,y)
return x + lib.a(y)
end
Будет ли lib
и функции внутри нее правильно собираться мусором?
Конечно, я знаю о двоеточии, но я хочу иметь возможность передавать функции в качестве аргументов другим функциям.
Я полагаю, что один из обходных путей - это сделать, но нужно ли это / то, что я хочу?
local weak_lib = setmetatable({},{__mode="v"}
function lib.b (x,y)
return x + weak_lib.a(y)
end
for k,f in pairs(lib) do
weak_lib[k] = f
end