[英]Does Lua __gc metamethod now work for table (Lua 5.2.1) ?
我一直有點驚訝,因為我已經閱讀之前,即__gc
元方法只要求用戶數據和從不為表。 ( LuaFAQ:為什么__gc和__len元方法不能在表上使用? )
但是,最近,我嘗試了一下,發現它確實有效! 使用Lua 5.2.1嘗試以下代碼:
do
local b = setmetatable({a = 1}, {__gc = function(self) print(self.a); end});
end
collectgarbage();
但是我在任何地方都找不到更改日志,因此我有點沮喪並且害怕使用它。
也許有人可以證明我的建議? 還是沒有記錄的行為? 對於我來說,有一種常規的方法來創建表析構函數將是很好的,如果我的觀察正確的話,我將感到高興。
Lua 5.2參考手冊的第2.5.1節指出表確實支持__gc
元方法。 具體來說,它說
對於要在收集時完成的對象(表或用戶數據),必須將其標記為完成。 當您設置對象的元表並且該元表具有由字符串“ __gc”索引的字段時,您會將對象標記為最終確定。
5.1參考手冊中的類似文檔說
使用C API,您可以為userdata設置垃圾收集器元方法
顯然,Lua 5.2現在明確支持表的__gc
元方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.