Lua функций, обращающихся к таблице, которая содержит их, и сборщик мусора - PullRequest
0 голосов
/ 23 февраля 2020

Будет ли сборка мусора работать правильно, если функция обращается к таблице, которая содержит саму функцию, т.е.

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
...