Возможно, вы ищете что-то вроде этого:
function varmapn(func, ...)
local args, result = { ... }, {}
for arg_i = 1, #(args[1]) do
local call_args = {}
for arg_list = 1, #args do
table.insert(call_args, args[arg_list][arg_i])
end
table.insert(result, func(table.unpack(call_args)))
end
return result
end
Пример взаимодействия:
> answer = varmapn(function (a, b) return a+b end, {1, 7, 3}, {5, 4, 8})
> print(answer)
table: 0x970eb0
> for i = 1, 3 do print(answer[i]) end
6
11
11
Или, вот немного сложнее функция, которая является более общим. Для списков аргументов он принимает массивы, или он принимает таблицы с произвольными ключами:
function mapn(func, ...)
local args, call_args = { ... }, {}
local result = {}
for k in pairs(args[1]) do
call_args[k] = {}
end
for arg_list, v in pairs(args) do
for k in pairs(args[1]) do
table.insert(call_args[k], v[k])
end
end
for k, v in pairs(call_args) do
result[k] = func(table.unpack(v))
end
return result
end
Пример взаимодействия:
> answer = mapn(function (a, b) return a+b end, {x=1, y=7, z=3}, {x=5, y=4, z=8})
> for k,v in pairs(answer) do print(k .. " = " .. v) end
z = 11
y = 11
x = 6
> answer = mapn(function (a, b) return a+b end, {1, 7, 3}, {5, 4, 8})
> for i = 1, 3 do print(answer[i]) end
6
11
11
Пожалуйста, не оставляйте вопросы без принятого ответа. Вы отправили это в течение недели назад и получили 3 ответа с тех пор. Принятые ответы помогают будущим пользователям быстрее решать свою проблему, а также вознаграждает человека, который вам больше всего помог. Если ни один из 3 ответов не помог, возможно, больше подчеркнуть вашу проблему. – warspyking