Порядок, в котором поля устанавливаются в конструкторах таблиц, не определен, если у вас есть дубликаты ключей.
В настоящее время компилятор группирует записи списка (50 записей списка на пакет).
Байт-кодваш конструктор можно увидеть, запустив luac -l
в вашем скрипте:
1 [1] NEWTABLE 0 1 2
2 [1] LOADK 1 -1 ; 1
3 [1] SETTABLE 0 -1 -2 ; 1 "a"
4 [1] SETTABLE 0 -3 -4 ; 2 "b"
5 [1] SETLIST 0 1 1 ; 1
Обратите внимание на SETLIST в конце.Для {10,20,30, [1] = "a", [2] = "b"}
байт-код:
1 [1] NEWTABLE 0 3 2
2 [1] LOADK 1 -1 ; 10
3 [1] LOADK 2 -2 ; 20
4 [1] LOADK 3 -3 ; 30
5 [1] SETTABLE 0 -4 -5 ; 1 "a"
6 [1] SETTABLE 0 -6 -7 ; 2 "b"
7 [1] SETLIST 0 3 1 ; 1
Если конструктор начинался со списка, скажем, длиной 60, то конечное значение t [1] будет равно «a».