Germany | Finland | Saint Petersburg | Drive

Ограничение функции unpack

Опубликовано в QLua

Функция unpack возвращает в качестве результата все значения таблицы с целочисленными индексами в соответствующем порядке. Функция весьма удобна. Например, с ее помощью легко узнать максимальное значение элемента таблицы:

t = {100,1,200,2,300,3}
print( math.max(unpack(t)) )

Насколько безопасно пользоваться этой функцией?

Напишем тест

x ={}
for i=1,math.huge do
     x[i] = i
     unpack(x)
     print(i,": success")
end

И запустим его в standalone интерпретаторе языка lua.  Скрипт в цикле от 1 до бесконечности добавляет новый элемент в таблицу и вызывает функцию unpack. Посмотрим, какого размера таблицу сможет та функция переварить.

 

Что имеем? Так выглядит конец листинга:

7994 : success
7995 : success
7996 : success
7997 : success
7998 : success
7999 : success
C:\Program Files (x86)\Lua\5.1\lua.EXE: unpack.lua:4: too many results to unpack
stack traceback:
[C]: in function 'unpack'
unpack.lua:4: in main chunk

Таким образом, максимально возможный размер таблицы 7999. Таблицу из 8000 элементов функция unpack обработать уже не в состоянии. Имплементация qlua ведет себя аналогично - в ней оставлены аналогичные ограничения. При использовании функции unpack имеет смысл учитывать эту её особенность.

 

Добавить комментарий


Архив QLua