我正在为 Lua 编写一个模块。关闭 lua 解释器时,即使用户忘记隐式调用关闭例程,它也必须运行清理例程。
该模块主要是用 C 编写的。
我应该使用 Lua C Api 中的哪个回调来检测程序执行结束?我唯一的想法是在代表我的模块的表上使用 __gc 元方法。有任何想法吗?
从 C 模块,简单的事情就是创建一个完整的userdata
with a metatable
with a __gc
元方法。将其存储在模块环境中的字段中,以便在卸载模块之前 GC 不会收集它。
根据手册, only userdata
得到他们的__gc
由收集器调用的元方法,因此不能使用表来保存模块的终结器。
对于用纯 Lua 编写的需要终结器的模块,您仍然需要有一个userdata
把它举起来。不受支持和未记录但广为人知的功能newproxy()可用于创建一个空的userdata
具有用于此目的的元表。称其为newproxy(true)
得到一个带有元表的,然后使用getmetatable()
检索元表,以便您可以添加__gc
它的元方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)