寻找“弱Lua注册表”

3

是否有一种方法让C以与使用参考系统相同的方式引用Lua 5.2中的对象,除了这些引用是弱引用并且随时可能被垃圾回收?换句话说,是否存在所有当前Lua对象的注册表,而不影响对象的引用计数?


http://lua-users.org/wiki/WeakTablesTutorial - Robert Harvey
1个回答

7
您可以通过引入一级间接性来实现此操作 - 而不是直接将值存储在注册表中并强制其为弱引用,请按照以下步骤进行:
  1. 创建一个表
  2. 通过设置元表 {__mode = "v"} 使其成为弱引用
  3. 使用某个已知但唯一的键将此表存储在注册表中
  4. 将您想要跟踪的所有对象保存在此表中
  5. 使用存储在注册表中的此表而不是注册表本身来查找所有对象

请注意,除非使用像 Pluto 这样的重型持久性,否则没有“跟踪所有Lua对象”(如Ruby中的ObjectSpace)。您只能访问您自己存储/跟踪的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接