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