Почему в этой таблице Lua только 4 поля? Там не должно быть 7? - PullRequest
2 голосов
/ 24 июня 2010

Почему в этой таблице Lua только 4 поля? Не должно ли быть 7?

   polyline = {color="blue", thickness=2, npoints=4,
                 {x=0,   y=0},
                 {x=10, y=0},
                 {x=-10, y=1},
                 {x=0,   y=1}
               }

print(table.maxn(polyline))    -- returns 4. Why?
print(polyline[2].x)   -- returns 10. Why? 

Я думал, что polyline[2] будет указывать на "толщину", которая является вторым полем в этой таблице.

1 Ответ

9 голосов
/ 24 июня 2010

Может быть, вам следует перечитать руководство оператора конструктора таблиц . Подводя итог, можно сказать, что именованным полям в таблице (то есть цвету, толщине, точкам 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 вообще не возвращает общее количество полей.

...