| Цитата |
|---|
VPM написал: подход дает возможность, из одного подхода создавать разные очереди? |
Не, ну если вам нужно одновременно для одной очереди и FIFO и LIFO, тогда да, очередь с двумя индексами более подходящая под эту задачу. Но нужно понимать, что нельзя в таком случае в разных потоках работать с одной стороны очереди. В разных потоках можно только FIFO: в одном потоке положил, в другом вытащил.
Но если используется для конкретной задачи LIFO, то не стоит усложнять. Достаточно классических методов работы с таблицами.
| Цитата |
|---|
VPM написал: В Вашем примере меня сильно смущает вот этот момент self[idx] = nil дыр не будет? |
Каких дыр? Мы вынули последний элемент таблицы, и присвоили ему значение nil. В таком случае оператор # работает корректно.
Но я просто привёл пример, как можно упростить ваш код, если вам "кровь из носу" нужно ООП.
А вообще для LIFO достаточно:
| Код |
|---|
tbl = {} -- создать таблицу
tbl[#tbl+1] = v -- добавить в конец таблицы
v = tbl[#tbl] -- получить последний элемент таблицы
tbl[#tbl] -- удалить последний элемент таблицы |
Но вы это и без меня знаете
