Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Laço for com in pairs

Gostaria de uma explicação melhor ao laço for com in pairs; no caso esse indice e objeto tambem, o indice equivale a 0? e o objeto seria o indice da tabela objetos?

for indice,objeto in pairs(objetos) do
        spr(objeto.sprite,
        objeto.x,
        objeto.y,
        objeto.corDeFundo,
        1,
        0,
        0,
        2,
        2)
    end
3 respostas

Olá Rayan,

Vamos supor que a tabela objetos tenha sido definida assim:

objetos = {
 {x=10, y=0},
 {x=30, y=20},
 {x=50, y=40}
}

Os valores são só de exemplo mas o que importa é que temos uma lista com 3 objetos diferentes e cada um desses objetos está em uma posição diferente da lista. Se fossemos expressar isso de uma forma diferente teríamos algo assim:

Lista objetos:
Posição 1 -> objeto {x=10, y=0}
Posição 2 -> objeto {x=30, y=20}
Posição 3 -> objeto {x=50, y=40}

Quando fazemos o for usando o pairs, é como se estivéssemos percorrendo essa segunda representação da nossa lista de objetos. O valor da variável indice vai indicar a posição do elemento na lista e o valor da variável objeto vai representar o objeto que está naquela posição. Por isso o pairs, estamos montando pares de (posição, objeto) a partir da lista objetos e estamos percorrendo eles um de cada vez.

Entendi, no caso se tivesse usado o for sem o in pairs ele pegaria todos os elementos da lista de uma unica vez?

solução

Em Lua, a forma mais simples de percorrer uma lista de objetos é usando essa função pairs. Se tentarmos fazer o for sem usar essa função aí teríamos um erro de sintaxe e o código não seria executado.

A outra forma do for só permite iterar em uma determinada faixa de valores:

for i=1, 10 do
  trace(i)
end

Por exemplo, no código acima estamos pedindo para imprimir os números de 1 até 10 mas perceba que não temos uma lista de números, por isso não precisamos usar a função pairs.