【问题标题】:Remove self in lua在lua中删除自我
【发布时间】:2016-07-09 05:02:33
【问题描述】:

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

self = nil

但这不起作用!是否有可能找出表中的对象键而无需循环查找它然后只使用 table.remove?这仍然不是最理想的,好像将来有引用我也必须从这些表中删除它。 如何实现?

【问题讨论】:

  • 通常,在面向对象的编程中,你永远不会显式地删除一个对象(除了释放内存的目的,在非垃圾收集的语言中)。你想通过删除对象来完成什么?你想从游戏世界中删除它吗?如果是这样,Love2D 可能在某处具有“从游戏世界中移除”功能。
  • 为什么不使用对象本身的table.removefunction myclass:destructor() for k, v in ipairs(allObjects) do if v == self then table.remove(allObjects, k) self = nil return end end end.

标签: lua love2d


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这正是我想要的。弱引用非常适合我的项目!
猜你喜欢
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2013-12-02
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多