In Программирование в Lua Первое обсуждение таблиц, они упоминают:
Поскольку вы можете индексировать таблицу с любым значением, вы можете начинать индексы массива с любого числа, которое вам нравится. Однако в Lua принято начинать массивы с 1 (а не с 0, как в C), и некоторые средства придерживаются этого соглашения.
Позже, в главе, посвященной структурам данных, они снова говорят почти то же самое: встроенные средства Lua предполагают индексирование на основе 1.
В любом случае, существует пара удобств для использования индексации на основе 1. А именно, оператор #
(длина): t[#t]
обращается к последнему (числовому) индексу таблицы, а t[#t+1]
обращается к 1 после последнего индекса. Для кого-то, кто еще не был подвержен индексации на основе 0, #t+1
будет более интуитивно понятным для перемещения за конец списка. Также существует конструкция Lua for i = 1,#t
, которая, как я считаю, относится к той же категории, что и предыдущая точка, что «1 к длине» может быть более разумным, чем индексирование «0 к длине минус 1».
Но если вы не можете нарушить мышление индексации на основе 0, то индексация на основе Lua, безусловно, может стать большим препятствием. В конечном счете, авторы хотели что-то, что работало бы на их ; и я признаю, что не знаю, какова была их оригинальная цель, но, вероятно, с тех пор она изменилась.