Lua关闭/程序执行结束回调函数

我正在为 Lua 写一个模块。当关闭 lua 解释器时,即使用户忘记显式调用关闭程序,它也必须运行清理例程。

该模块主要是用 C 编写的。

Lua C Api 中的哪个回调函数应该用来检测程序执行的结束?我唯一想到的主意是使用表示我的模块的表上的 __gc 元方法。有什么想法吗?

原文链接 https://stackoverflow.com/questions/3912296

点赞
stackoverflow用户68204
stackoverflow用户68204

从 C 模块出发,创建一个带有 metatable__gc 元方法的完整 userdata 十分简单。将它存储在模块环境的字段中,确保在模块卸载之前不会被垃圾回收器收回。

根据手册的说明,只有 userdata 才会被垃圾回收器调用其 __gc 元方法,因此无法使用表来保持模块的终结器。

对于需要终结器的纯 Lua 模块,仍需要一个 userdata 来进行保持。不受支持且未记录的但广为人知的 newproxy() 函数可用于创建一个带有元表的空 userdata 以供此目的使用。调用 newproxy(true) 来获取一个带有元表的对象,并使用 getmetatable() 函数来检索元表,以添加 __gc 元方法。

2010-10-12 07:52:20