Согласно , длина такой таблицы (#tab) должна быть 6 , но у меня показывает 9 . Это ошибка в документации или в самом Lua/QLUA?
Ошибки нет.
The length of a table t is defined to be ANY integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be ANY of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
Я выделил слово ANY из вашей документации большими буквами.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
25.06.2015 10:00:41
s_mike@rambler.ru, Во-первых, документация не моя. Это официальная документация. Во-вторых, вы явно не поняли смысл этого "any":
Цитата
The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then #t can be any of the indices that directly precedes a nil value (that is, it may consider any such nil value as the end of the array).
Надо делать так, как надо. А как не надо - делать не надо.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
25.06.2015 10:17:50
Давайте я вам переведу.
Длина таблицы t определяется как ЛЮБОЙ числовой индекс, такой, что that t[n] ~= nil и t[n+1] == nil
В вашем примере элемент с индексом 9 подходит под это определение? Подходит. Результат #tab равен 9
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
25.06.2015 10:21:09
Во втором примере первым попался элемент с индексом 3. Он тоже подходит под определение.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 01.02.2015
25.06.2015 10:47:42
так и есть - они с Михаилом Булычевым - уже поднимали этот вопрос на старом форуме: -->
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
25.06.2015 11:12:55
Получается использование оператора # для таблицы с целочисленными индексами не имеет смысла, если только достоверно не известно, что элементы таблицы заполнены без пропусков. В противном случае результат может быть не предсказуем.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
25.06.2015 11:42:45
дополню инфой из документации, ссылку дать не могу так как не помню. ------------------- При работе VMLUA с таблицами происходит следующее. -------------------- Элементы не проверяются на содержимое так как это замедляло бы работу. --------------------- поэтому если элементу присвоить nil и он не последний, то сборщик его не видит так как нет функции упаковки разряженных таблиц. т е элемент существует , а что внутри таблицы сборщик мусора никогда не проверяет. Это существенно ускоряет вычисления.