dollar
@dollar
Делай добро и бросай его в воду.

Почему в массиве одновременное добавление и удаление вызывает ошибку?

local t = {a=1}

for k,v in pairs(t) do
  t[k] = nil
  t[1] = 2
end

Разве в спецификации сказано, что так делать нельзя?
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
@zedxxx
В документации к lua 5.1, в описании функции next сказано:

The behavior of next is undefined if, during the traversal, you assign any value to a non-existent field in the table. You may however modify existing fields. In particular, you may clear existing fields.


т.е. можно изменять или удалять существующие элементы, но нельзя добавлять новые.

В доках к lua 5.3 я такого замечания не нашёл (плохо искал?), но вообще, с практической точки зрения, добавление новых элементов в таблицу во время итерирования по ней, очень плохая идея.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы