寻求“弱Lua注册表”

时间:2012-08-07 22:22:55

标签: lua lua-api

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

1 个答案:

答案 0 :(得分:7)

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

  1. 创建表格
  2. 通过设置元表{__mode = "v"}
  3. 使其变弱
  4. 使用一些已知但唯一的密钥
  5. 将此表存储在注册表中
  6. 在此表格中保留您要跟踪的所有对象
  7. 使用存储在注册表中的此表而不是注册表本身来查找所有对象
  8. 请注意,没有“跟踪所有Lua对象”(如Ruby中的ObjectSpace),除非你使用像Pluto这样的重度持久性。您只能访问自己存储/跟踪的对象。