3

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

4

1 回答 1

7

您可以通过引入一级间接来做到这一点 - 而不是将值直接存储在注册表中并强制它变弱,这样做:

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

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

于 2012-08-08T08:01:48.730 回答