Lua 函数访问包含它们的表和垃圾回收机制

如果一个函数访问包含它本身的表,比如下面的例子:

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
点赞