正如Egor在评论中所写,您可以使用__gc
metamethod来捕获Lua 5.2+中最终垃圾收集的事件。您将需要使用newproxy
Lua 5.1中未记录的内容。以下代码应在Lua 5.1和更高版本的解释器中工作:
local m = {onexit = function() print("exiting...") end}
if _VERSION >= "Lua 5.2" then
setmetatable(m, {__gc = m.onexit})
else
m.sentinel = newproxy(true)
getmetatable(m.sentinel).__gc = m.onexit
end
Run Code Online (Sandbox Code Playgroud)