垃圾收集器 - 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