ANSWER: использовать только таблицу. * Функции для последовательностей (массивы/список) (таблицы с целыми целыми целыми числами начиная с 1). Их поведение не определено в таблице, не связанной с массивом: они могут работать или не работать так, как вы могли ожидать.table.insert переопределить существующий индекс
В Lua 5.1 table.insert (т, индекс, значение) должен двигаться вверх, если значения индекса уже существует в таблице, не так ли?
Но это не всегда так делают:
local t = {}
table.insert(t, 4, 5)
table.insert(t, 5, 6)
table.insert(t, 4, 4) -- this erase the value 5 at key 4
-- t[4] = 4, t[5] = 6, t[6] = nil
local t = {}
table.insert(t, 1)
table.insert(t, 2)
table.insert(t, 3)
table.insert(t, 6, 7)
table.insert(t, 6, 6) -- this erase the value 7 at key 6
-- t[6] = 6, t[7] = nil
Но:
local t = {}
table.insert(t, 1) -- these two lines were added
table.insert(t, 2)
table.insert(t, 4, 5)
table.insert(t, 5, 6)
table.insert(t, 4, 4) -- now it moves the values up
-- t[4] = 4, t[5] = 5, t[6] = 5
local t = {}
table.insert(t, 1)
table.insert(t, 2)
table.insert(t, 3)
table.insert(t, 4) -- this line was added
table.insert(t, 6, 7)
table.insert(t, 6, 6) -- now it moves the values up
-- t[6] = 6, t[7] = 7
Это работает, как, что в командной строке LuaForWindows, а также приложение, которое запускается Lua скрипты (CraftStudio), как используя Lua 5.1.
Похоже, что это происходит, когда
- (число записей) < индекса (для первого примера)
- (число записей) < индекс-1 (для второго примера)
Итак, это ожидаемое поведение, ошибка Lua 5.1? Есть ли еще одна формула для прогнозирования, если это произойдет или нет?
Большое спасибо
table.insert (и действительно все функции таблицы. *) Определены только для работы над таблицами, подобными массивам, без отверстий. Их поведение, когда таблица содержит отверстия, не гарантируется. –