寻找"弱Lua注册表"

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

点赞
用户221509
用户221509

你可以通过引入一层间接性来实现此功能-而不是直接将值存储在注册表中并强制它成为弱引用,可以这样做:

  1. 创建一个表
  2. 通过设置元表 {__mode = "v"} 使其成为弱表
  3. 使用某个已知但唯一的键将此表存储在注册表中
  4. 将要跟踪的所有对象保留在此表中
  5. 使用存储在注册表中的此表而非注册表本身来查找所有对象

请注意,除非您使用诸如 Pluto 的重型持久性,否则没有“跟踪所有 Lua 对象”(类似于 Ruby 中的 [ObjectSpace] (http://www.ruby-doc.org/core-1.9.3/ObjectSpace.html))。您只能访问自己存储/跟踪的对象。

2012-08-08 08:01:48