Как получить все множественные результаты от нескольких функций внутри функции с неопределённым числом аргументов?
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()})
Ну или последовательными вызовами функций... Все зависит от задачи