我有点惊讶,因为我以前读过,__gc
元方法只对用户数据调用,从不对表调用。(LuaFAQ :为什么 __gc 和 __len 元方法不能在表上工作?)
但是,最近,我尝试了它,发现它确实有效!用 Lua 5.2.1 试试这个代码:
do
local b = setmetatable({a = 1}, {__gc = function(self) print(self.a); end});
end
collectgarbage();
但是我在任何地方都找不到此更改日志,所以我有点沮丧并且害怕使用它。
也许,有人可以证明我的建议?或者这是一种无证行为?对我来说,有一个常规的方法来创建表析构函数会很好,如果我的观察是正确的,我会很高兴。