Таблица переменных аргументов - PullRequest
1 голос
/ 05 октября 2019

В lua я использую функцию кого-то еще, которая принимает переменное число аргументов. То, что я хотел бы сделать, это построить список аргументов через цикл. Возможно ли это?

Пример функции:

printResult = ""

function print (...)
  for i,v in ipairs(arg) do
    printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
end

Я пытался

print({"test","test2"})

Но это только передает один аргумент (таблицу) в функцию

1 Ответ

1 голос
/ 06 октября 2019

Вы ищете функцию table.unpack. Вы можете создать аргументы для функции vararg, которую вы хотите вызвать в таблице. Вызов table.unpack для таблицы раскроет таблицу в список аргументов. Точно так же,

args = {}
for i = 1, 4 do
    args[#args+1] = i * i * math.pi
end

print(table.unpack(args))

Кроме того, вам понадобится опубликованная вами функция print, чтобы собрать все эти аргументы в список arg, который вы используете ...

function print (...)
  printResult = ""
  arg = {...}
  for i,v in ipairs(arg) do
    printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
  return printResult
end

Наконец, уже есть способ выполнить то, что вы пытаетесь сделать, используя table.concat.

function print(...)
    return table.concat({...}, "\t").."\n"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...