簡體   English   中英

Lua __gc元方法現在可用於表(Lua 5.2.1)嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM