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

Я использую 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 Ответ

2 голосов
/ 19 марта 2019

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)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...