在 lua 中删除自己
Remove self in lua
我目前正在 Love2D 中开发一款游戏,并使用名为 middleclass 的 OOP 库。不幸的是,中间类默认没有析构函数,即允许我销毁对象的东西。我将所有对象存储在 table 中,这样我就可以遍历它们并执行它们的绘制和更新函数。在我的代码中,我希望对象能够自行删除。我试过了
self = nil
但这行不通!是否可以找到 table 中的对象键而不用循环查找它然后只使用 table.remove?这仍然是次优的,因为如果将来有参考,我也必须将其从那些 table 中删除。
如何实现?
您可以将对象保存在由对象本身索引的 table 中:cache[obj] = obj
。然后要从游戏中删除该对象,您只需执行 cache[self] = nil
并且(假设没有其他对该对象的引用)它会在一段时间后被垃圾回收。
如果您有其他地方引用该对象,您可以检查 "weak" tables 的使用是否适合您的用例。
我目前正在 Love2D 中开发一款游戏,并使用名为 middleclass 的 OOP 库。不幸的是,中间类默认没有析构函数,即允许我销毁对象的东西。我将所有对象存储在 table 中,这样我就可以遍历它们并执行它们的绘制和更新函数。在我的代码中,我希望对象能够自行删除。我试过了
self = nil
但这行不通!是否可以找到 table 中的对象键而不用循环查找它然后只使用 table.remove?这仍然是次优的,因为如果将来有参考,我也必须将其从那些 table 中删除。 如何实现?
您可以将对象保存在由对象本身索引的 table 中:cache[obj] = obj
。然后要从游戏中删除该对象,您只需执行 cache[self] = nil
并且(假设没有其他对该对象的引用)它会在一段时间后被垃圾回收。
如果您有其他地方引用该对象,您可以检查 "weak" tables 的使用是否适合您的用例。