Подтвердить что ты не робот

Как распаковать таблицу в аргументы функции

Я пытаюсь вызвать функцию в 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.

4b9b3361

Ответ 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(), чтобы поддерживать переменное число именованных аргументов.