垃圾收集器 - gc metamethod

Version >= 5.2

lua 中的对象是垃圾收集的。有时,你需要释放一些资源,想要在对象被销毁(收集)时打印消息或执行其他操作。为此,你可以使用 __gc 元方法,当对象被销毁时,该方法将以对象作为参数进行调用。你可以将此 metamethod 视为一种析构函数。

这个例子展示了 __gc 元方法的实际应用。当分配给 t 的内部表被垃圾收集时,它会在收集之前打印一条消息。同样,对于外部表到达脚本结束时:

local meta =
{
    __gc = function(self)
        print("destroying self: " .. self.name)
    end
}

local t = setmetatable({ name = "outer" }, meta)
do
    local t = { name = "inner" }
    setmetatable(t, meta)
end