Как получить все множественные результаты от нескольких функций внутри функции с неопределённым числом аргументов?

function spam()
  return 1, 2, 3
end

function collectSpam(...)
  print(...)
end

--- почему-то печатает 1,1,1,2,3 вместо 1,2,3,1,2,3,1,2,3
collectSpam(spam(), spam(), spam())

Ответы (1 шт):

Автор решения: Andrej Levkovitch

Дело в том, что когда вы используете функцию в выражении, то lua сохраняет только первое значение. Только для последнего вызова сохраняются все значения. Поэтому у вас такой вывод и поэтому нельзя решить эту проблему подобным образом. Однако это можно решить другими способами, например таблицами:

local function alpha() return 1, 2, 3 end

local function foo(...)
  local out = {...}
  for _, val in ipairs(out) do
    if type(val) == "table" then
      for _, item in ipairs(val) do print(item) end
    end
  end
end

foo({alpha()}, {alpha()})

Ну или последовательными вызовами функций... Все зависит от задачи

→ Ссылка