как получить несколько значений, возвращаемых в таблицу?не возвращая стол [lua] - PullRequest
0 голосов
/ 28 февраля 2019

пример

function func1()
 return 1,1,1,1
end

table = {}
table = func1()

print(table)

Я не хочу делать

 function func1()
  return {1,1,1,1}
 end

, потому что функция, с которой я работаю, уже определена, и я не могу ее изменить.

желаемый результат равен

1 1 1 1

, но это не так;он возвращает только первое значение, которое вернула функция.

Как я могу сделать это возможным?Извините за плохое форматирование;я впервые задаю вопрос.

Кроме того, я почти уверен, что таблица равна массиву?извините за это.

РЕДАКТИРОВАТЬ Я также не знаю количество аргументов.

1 Ответ

0 голосов
/ 28 февраля 2019

Функция, которая возвращает несколько результатов, возвращает их отдельно, а не в виде таблицы.

Ресурс 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...