Как распаковать таблицу в аргументы функции
Я пытаюсь вызвать функцию в Lua, которая принимает несколько аргументов "number"
function addShape(x1, y1, x2, y2 ... xn, yn)
и у меня есть таблица значений, которую я хотел бы передать как аргументы
values = {1, 1, 2, 2, 3, 3}
Возможно ли динамически "распаковать" (я не уверен, что это правильный термин) эти значения в вызове функции? Что-то вроде..
object:addShape(table.unpack(values))
Эквивалент вызова:
object:addShape(1, 1, 2, 2, 3, 3)
Извините, если это абсолютно очевидный вопрос Lua, но я не могу, чтобы жизнь меня находила что-либо по этой теме.
ОБНОВИТЬ
unpack(values)
также не работает (вникание в метод addShape(...)
и проверка типа переданного значения показывает, что unpack
приводит к одной string
.
Ответы
Ответ 1
Вы хотите это:
object:addShape(unpack(values))
См. Также: http://www.lua.org/pil/5.1.html
Вот полный пример:
shape = {
addShape = function(self, a, b, c)
print(a)
print(b)
print(c)
end
}
values = {1, 2, 3}
shape:addShape(unpack(values))
Ответ 2
Это не ответ на вопрос о распаковке, а предложение использовать другую технику. Вместо этого
function object:addShape(values)
for i,v in ipairs(values) do
x,y = v.x, v.y
...
end
end
function getPairs(values)
xyPairs = {}
for i=1,#values,2 do
v = {x=values[i], y=values[i+i] }
table.insert(xyPair, v)
end
return xyPairs
end
values = {1, 1, 2, 2, 3, 3}
object:addShape(getPairs(values))
Объем работы, который должен быть выполнен, должен быть аналогичен распаковке и дополнительной обработке, которую вам нужно будет сделать в addShape(), чтобы поддерживать переменное число именованных аргументов.