Использовать цикл для вызова нескольких функций в 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"]