Могу ли я использовать table.concat в качестве набора аргументов?

#lua #love2d

#lua #love2d

Вопрос:

Я использую LOVE2D, чтобы немного привыкнуть к lua, и я пытаюсь вызвать функцию, чтобы на экране появился круг, там 5 аргументов, и у меня есть таблица, известная как «кнопка», с требуемыми аргументами в ней. Я хочу использовать table.concat для заполнения всех пустых аргументов, но это мне не позволяет. Есть ли какой-либо способ сделать это?

 function toRGB(r,g,b)
    return r/255,g/255,b/255
end

function love.load()
    button = {}
    button.mode = "fill"
    button.x = 0
    button.y = 0
    button.size = 30
end

function love.draw()
    love.graphics.setColor(toRGB(60,60,60))
    love.graphics.circle(table.concat(button))
end
  

Ответ №1:

table.concat возвращает строку. Это не то, что вы хотите.

Чтобы получить список элементов таблицы, используйте table.unpack . Но эта функция работает только с таблицами, которые имеют последовательные числовые индексы, начинающиеся с 1.

Также love.graphics.circle доступ к его параметрам осуществляется по позиции, а не по имени. Следовательно, вы должны убедиться, что список выражений, который вы вводите в эту функцию, имеет правильный порядок.

Итак, что-то вроде:

 button = {"fill", 0, 0, 30}
love.graphics.circle(table.unpack(button))
  

сработало бы.

Если вы используете другие ключи таблицы, как в вашем примере, вам придется написать функцию, которая возвращает значения в правильном порядке.

В простейшем случае

 button = {}
button.mode = "fill"
button.x = 0
button.y = 0
button.size = 30
button.unpack = function() return button.mode, button.x, button.y, button.size end
love.graphics.circle(button.unpack())
  

Или вы можете сделать что-то вроде этого:

 function drawCircle(params)
  love.graphics.circle(params.mode, params.x, params.y, params.size)
end
drawCircle(button)
  

Есть много других способов добиться этого.