Ich entwickle gerade ein Spiel in Love2D und verwende eine OOP-Bibliothek, die als Mittelklasse bekannt ist. Unglücklicherweise hat die Mittelklasse standardmäßig keine Destruktoren, d. H. Etwas, was es mir erlaubt, ein Objekt zu zerstören. Ich speichere alle meine Objekte in einer Tabelle, damit ich sie durchlaufen und ihre Draw- und Update-Funktionen ausführen kann. In meinem Code möchte ich, dass das Objekt sich selbst entfernen kann. Ich habe versuchtSelbst entfernen in lua
self = nil
, aber das funktioniert nicht! Wäre es möglich, den Schlüssel der Objekte in der Tabelle zu finden, ohne ihn zu durchforsten und dann einfach table.remove zu verwenden? Dies ist immer noch suboptimal, als ob es Referenzen in der Zukunft gäbe, die ich auch aus diesen Tabellen entfernen müsste. Wie kann dies erreicht werden?
In der objektorientierten Programmierung löschen Sie normalerweise nie explizit ein Objekt (außer zum Zweck der Freigabe von Speicher in nicht-müllsammelbaren Sprachen). Was versuchen Sie zu erreichen, indem Sie das Objekt löschen? Möchtest du es aus der Spielwelt löschen? Wenn dem so ist, könnte Love2D irgendwo eine Funktion "aus der Spielwelt entfernen" haben. –
Warum nicht 'table.remove' vom Objekt selbst verwenden? 'function myclass: destructor() für k, v in ipairs (allObjects) macht, wenn v == self dann table.remove (allObjects, k) self = nil return end ende ende. – user6245072