是否有可能使用userdata在Lua中获取析构函数?
http://www.lua.org/notes/ltn006.html看起来很有前途(事实上正是我想要的); 除了它是Lua 4.0的路径.
基本上,我想要一种在收集表时调用函数的方法.
谢谢!
Mar*_*off 15
从metatables的文档:
元表可以控制对象在算术运算,顺序比较,连接,长度操作和索引中的行为方式.metatable还可以定义在垃圾收集用户数据时要调用的函数.
Lua用户的Lua FAQ说明:
为什么__gc和__len元方法不能用于表格?
当对象即将被删除时,Userdata对象经常需要一些显式的析构函数来运行,Lua
__gc为此提供了元方法.但是,为了提高效率,表格上不允许这样做.通常,不需要在表上设置析构函数,因为该表将被自动删除,并且表中包含的任何引用将被正常地进行垃圾收集.一种可能的解决方法是创建用户数据; 使表成为userdata的环境表,并在表中放置对userdata的引用.(确保这是对userdata的唯一引用.)当表变为可收集时,
__gc将运行userdata的metamethod; 在发生这种情况之前,Lua实际上不会销毁该表,因为该表由userdata引用.
所以,如果你想获得__gc活动,你必须手动将表包装在userdata中.