在 lua 中删除自己

Remove self in lua

我目前正在 Love2D 中开发一款游戏,并使用名为 middleclass 的 OOP 库。不幸的是,中间类默认没有析构函数,即允许我销毁对象的东西。我将所有对象存储在 table 中,这样我就可以遍历它们并执行它们的绘制和更新函数。在我的代码中,我希望对象能够自行删除。我试过了

self = nil

但这行不通!是否可以找到 table 中的对象键而不用循环查找它然后只使用 table.remove?这仍然是次优的,因为如果将来有参考,我也必须将其从那些 table 中删除。 如何实现?

您可以将对象保存在由对象本身索引的 table 中:cache[obj] = obj。然后要从游戏中删除该对象,您只需执行 cache[self] = nil 并且(假设没有其他对该对象的引用)它会在一段时间后被垃圾回收。

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