Na primeira discussão de tabelas de Programação em Lua , eles mencionam:
Como você pode indexar uma tabela com qualquer valor, é possível iniciar os índices de uma matriz com qualquer número que lhe agrade. No entanto, é comum em Lua iniciar matrizes com 1 (e não com 0, como em C) e várias instalações aderem a essa convenção.
Posteriormente, no capítulo sobre estruturas de dados, eles dizem quase a mesma coisa novamente: que as instalações internas de Lua assumem indexação baseada em 1.
De qualquer forma, existem algumas conveniências no uso da indexação baseada em 1. Ou seja, o #
operador (comprimento): t[#t]
acessa o último índice (numérico) da tabela e t[#t+1]
acessa 1 após o último índice. Para alguém que ainda não foi exposto à indexação baseada em 0, #t+1
seria mais intuitivo passar do final de uma lista. Há também a for i = 1,#t
construção de Lua , que acredito estar na mesma categoria do ponto anterior, que "1 ao comprimento" pode ser mais sensível do que indexar "0 ao comprimento menos 1".
Mas, se você não pode quebrar a mentalidade da indexação baseada em 0, a indexação baseada em 1 de Lua certamente pode ser mais um obstáculo. Por fim, os autores queriam algo que funcionasse para eles ; e admito que não sei qual era o objetivo original , mas provavelmente mudou desde então.