Функция, которая возвращает несколько результатов, возвращает их отдельно, а не в виде таблицы.
Ресурс Lua для нескольких результатов: https://www.lua.org/pil/5.1.html
Вы можете делать то, чтовы хотите вот так:
t = {func1()} -- wrapping the output of the function into a table
print(t[1], t[2], t[3], t[4])
Этот метод всегда будет получать все выходные значения.
Этот метод также можно выполнить с помощью table.pack
:
t = table.pack(func1())
print(t[1], t[2], t[3], t[4])
с помощью table.pack
вы можете отбросить ноль результатов.Это может быть полезно для сохранения простой проверки количества результатов с помощью оператора длины #
;однако это происходит за счет того, что результат больше не сохраняется.
Для дальнейшего объяснения, если вместо func1
вместо 1, nil, 1, 1
возвращается первый метод, вы получите таблицу, где t[2] == nil
.с вариацией table.pack
вы получите t[2] == 1
.
В качестве альтернативы вы можете сделать это:
function func1()
return 1,1,1,1
end
t = {}
t[1], t[2], t[3], t[4] = func1() -- assigning each output of the function to a variable individually
print(t[1], t[2], t[3], t[4])
Этот метод может позволить вам выбирать и выбирать, куда идут выходы илиесли вы хотите игнорировать один из них, вы можете просто сделать:
t[1], _, t[3], t[4] = func1() -- skip the second value