C 有没有办法以与使用引用系统相同的方式引用 Lua 5.2 中的对象,只是这些引用很弱并且可能随时被垃圾收集?换句话说,是否存在一个不影响对象引用计数的所有当前 Lua 对象的注册表?
问问题
579 次
1 回答
7
您可以通过引入一级间接来做到这一点 - 而不是将值直接存储在注册表中并强制它变弱,这样做:
- 创建表
- 通过设置元表使其变弱
{__mode = "v"}
- 使用一些已知但唯一的键将此表存储在注册表中
- 将您要跟踪的所有对象保留在此表中
- 使用存储在注册表中的此表而不是注册表本身来查找所有对象
请注意,没有“跟踪所有 Lua 对象”(如Ruby 中的ObjectSpace),除非您使用像Pluto这样的重持久性。您只能访问您自己存储/跟踪的对象。
于 2012-08-08T08:01:48.730 回答