在lua中移除自身

我正在使用Love2D开发一个游戏,使用一个名为middleclass的OOP库。不幸的是,middleclass默认没有析构函数,即没有允许我销毁对象的函数。我将所有的对象存储在一个table中,以便可以循环执行其绘制和更新函数。在我的代码中,我希望对象能够自我删除。我尝试过

self = nil

但这不起作用!有没有可能找到table中对象的键,而不需要通过循环来查找,然后只需使用table.remove?但这仍然不是最佳选择,因为如果将来有参考引用,我还需要从那些表中删除它。 怎样才能实现这个呢?

点赞
用户1442917
用户1442917

你可以将对象保存在一个以对象本身为索引的表格中:cache[obj] = obj。然后要从游戏中删除对象,你只需要执行cache[self] = nil,并且(假定该对象没有其他引用)它将在稍后被垃圾回收。

如果你有其他引用该对象的地方,你可以检查使用 "weak" tables 是否适合你的用例。

2016-07-08 21:02:33