繁体   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