Может быть, вам следует перечитать руководство оператора конструктора таблиц . Подводя итог, можно сказать, что именованным полям в таблице (то есть цвету, толщине, точкам n) не присвоен числовой индекс, только имя. Если вы опустите имя, будет создан индекс на основе 1. Ваше определение polyline
эквивалентно этому определению:
polyline = {
color="blue", thickness=2, npoints=4,
[1] = {x=0, y=0},
[2] = {x=10, y=0},
[3] = {x=-10, y=1},
[4] = {x=0, y=1}
}
Это объясняет вывод print(polyline[2].x)
(также поля таблиц в таблицах Lua не имеют никакого порядка; pairs
разрешено перечислять их в любом порядке). Что касается table.maxn
:
[table.maxn] Возвращает наибольшее положительное число
индекс данной таблицы или ноль, если
таблица не имеет положительного числа
индексы. (Чтобы сделать свою работу эта функция
делает линейный обход всего
таблица.)
Значит, вывод снова правильный. Таблица действительно содержит 7 полей, но table.maxn
вообще не возвращает общее количество полей.