寻求"弱Lua注册表"

Pau*_*aul 3 lua lua-api

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

Mic*_*man 7

您可以通过引入一个间接级别来实现此目的 - 而不是将值直接存储在注册表中并强制它变弱,请执行以下操作:

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

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