Почему (таблицы) массивов Lua запускаются в 1 вместо 0?

Я не понимаю объяснения позади решения об этой части Lua. Почему индексация запускается в 1? Я читал (как многие другие сделали), эта большая бумага. Это кажется мне странным углом языка, который очень приятно выучить и программировать. Не понимайте меня превратно, Lua является просто большим, но где-нибудь должно быть объяснение. Большая часть того, что я нашел (в сети) просто говорит, что индекс запускается в 1. Точка.

Было бы очень интересно считать то, что его разработчики сказали о предмете.

Обратите внимание, что я - "очень" новичок в Lua, я надеюсь, что не пропускаю что-то очевидное о таблицах.

120
задан anderspitman 8 October 2018 в 21:45
поделиться

3 ответа

Lua произошел от Sol, языка, разработанного для инженеров-нефтяников без формальных обучение компьютерному программированию. Люди, не обученные вычислениям, думают, что начинать счет с нуля чертовски странно. Приняв массив на основе 1 и индексирование строк, дизайнеры Lua избежали путаницы в ожиданиях своих первых клиентов и спонсоров.

Хотя вначале я тоже находил их странными, я научился любить массивы на основе 0. Но с массивами Lua на основе 1 у меня все в порядке, особенно за счет использования общего цикла Lua for и оператора ipairs - обычно я могу не беспокоиться о том, как именно массивы проиндексированы.

133
ответ дан 24 November 2019 в 01:40
поделиться

В первом обсуждении таблиц Программирование на Lua они упоминают:

Поскольку вы можете индексировать таблицу с любым значением , вы можете начинать индексы массива с любого числа, которое вам нравится. Однако в Lua принято начинать массивы с 1 (а не с 0, как в C), и некоторые средства придерживаются этого соглашения.

Позже, в главе о структурах данных, они снова говорят почти то же самое: встроенные средства Lua предполагают индексирование на основе 1.

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

Но, если вы не можете сломать мышление об индексировании на основе 0, то индексирование на основе 1 в Lua, безусловно, может быть большим препятствием. В конце концов, авторы хотели что-то, что работало для них ; и я признаю, что не знаю, какова была их первоначальная цель, но с тех пор она, вероятно, изменилась.

42
ответ дан 24 November 2019 в 01:40
поделиться

Насколько я понимаю, он таков только потому, что авторы решили, что это хороший способ сделать это, и после того, как они распространили язык среди общественности, это решение значительно укрепилось. (Подозреваю, что если бы они изменили его сегодня, то поплатились бы чертями!) Я никогда не видел особого обоснования, помимо этого.

14
ответ дан 24 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: