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