You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中带__gc元方法的对象终结器调用顺序是否为创建逆序?

Lua中带__gc元方法的对象终结器调用顺序

在Lua里,带有__gc元方法的对象,其终结器的调用顺序是确定的——遵循反向创建顺序:后创建的对象会先被调用终结器。

回到你的代码:

function fun()
   local o1 = foo:new() -- object with __gc metamethod
   local o2 = bar:new() -- object with __gc metamethod
end

当fun执行完毕,局部变量o1和o2都会被标记为可回收。此时Lua会优先调用o2的终结器,之后再调用o1的终结器。

需要注意的是,这个规则仅适用于同一垃圾回收周期内被标记的对象;如果对象在不同周期被标记回收,它们的终结器顺序就不再遵循反向创建规则,但同一周期内的对象必然按反向顺序执行。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:14:50