Использовать цикл для вызова нескольких функций в lua

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

function scene:createScene(event)

screenGroup = self.view

level1= display.newRoundedRect( 50, 110, 50, 50, 5 )
level1:setFillColor( 100,0,200 )
level2= display.newRoundedRect( 105, 110, 50, 50, 5 )
level2:setFillColor (100,200,0)
--and so on so forth

screenGroup:insert (level1)
screenGroup:insert (level2)
screenGroup:insert (level3)
screenGroup:insert (level4)

end 

Я планирую расширить screenGroop: метод вставки до сотен уровней, возможно, до (level300). Как вы видите, то, как я это делаю сейчас, неэффективно. Я пытался делать

for i=1, 4, 1 do 
screenGroup:insert(level..i)
end

но я получаю ошибку "таблица ожидаемая".

2 ответа

В этом случае лучше всего использовать таблицу:

local levels = {}
levels[1] = display.newRoundedRect( 50, 110, 50, 50, 5 )
levels[1]:setFillColor( 100,0,200 )
levels[2] = display.newRoundedRect( 105, 110, 50, 50, 5 )
levels[2]:setFillColor (100,200,0)
--and so on so forth

for _, level in ipairs(levels) do
  screenGroup:insert(level)
end

Для других альтернатив проверьте ответ SO от комментария @EtanReisner.

Если ваши таблицы уровня являются глобальными, то есть, по-видимому, вы можете использовать getfenv индексировать их.

for i = 1, number_of_levels do
    screenGroup:insert(getfenv()["level" .. i])
end

getfenv возвращает среду со всеми глобальными переменными в форме словаря. Следовательно, вы можете индексировать его как обычную таблицу, например getfenv()["key"]

Другие вопросы по тегам