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