В настоящее время я разрабатываю игру в Love2D и использую библиотеку ООП, известную как средний класс. К сожалению, средний класс по умолчанию не имеет деструкторов, то есть что-то, что позволяет мне уничтожить объект. Я сохраняю все свои объекты в таблице, чтобы я мог их пропустить и выполнить их функции Draw и Update. В моем коде я хочу, чтобы объект мог удалять себя. Я пробовалУдалить себя в lua
self = nil
но это не работает! Можно ли узнать ключ объектов в таблице, не пробираясь через него, чтобы найти его, а затем просто использовать table.remove? Это все еще субоптимально, как если бы в будущем были ссылки, мне также пришлось бы удалить его из этих таблиц. Как это можно достичь?
Обычно в объектно-ориентированном программировании вы никогда явно не удаляете объект (за исключением освобождения памяти, на языках, не связанных с мусором). Что вы пытаетесь выполнить, удалив объект? Вы хотите удалить его из игрового мира? Если это так, у Love2D есть функция «удалить из игрового мира». –
Почему бы не использовать 'table.remove' из самого объекта? 'function myclass: destructor() для k, v в ipairs (allObjects), если v == self then table.remove (allObjects, k) self = nil return end end end'. – user6245072