【发布时间】:2016-07-09 05:02:33
【问题描述】:
我目前正在用 Love2D 开发一款游戏,并使用称为 middleclass 的 OOP 库。不幸的是,middleclass 默认情况下没有析构函数,即允许我销毁对象的东西。我将所有对象存储在一个表中,这样我就可以遍历它们并执行它们的 Draw 和 Update 函数。在我的代码中,我希望对象能够自行删除。我试过了
self = nil
但这不起作用!是否有可能找出表中的对象键而无需循环查找它然后只使用 table.remove?这仍然不是最理想的,好像将来有引用我也必须从这些表中删除它。 如何实现?
【问题讨论】:
-
通常,在面向对象的编程中,你永远不会显式地删除一个对象(除了释放内存的目的,在非垃圾收集的语言中)。你想通过删除对象来完成什么?你想从游戏世界中删除它吗?如果是这样,Love2D 可能在某处具有“从游戏世界中移除”功能。
-
为什么不使用对象本身的
table.remove?function myclass:destructor() for k, v in ipairs(allObjects) do if v == self then table.remove(allObjects, k) self = nil return end end end.