IntoIterator

O trait Iterator informa como iterar depois de criar um iterador. O trait relacionado IntoIterator define como criar um iterador para um tipo. Ele é usado automaticamente pelo laço for.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.

Clique na documentação para IntoIterator. Toda implementação de IntoIterator deve declarar dois tipos:

  • Item: o tipo sobre o qual iteramos, como i8,
  • IntoIter: o tipo Iterator retornado pelo mĂ©todo into_iter.

Observe que IntoIter e Item estĂŁo vinculados: o iterador deve ter o mesmo tipo Item, o que significa que ele retorna Option<Item>

O exemplo itera sobre todas as combinaçÔes de coordenadas x e y.

Tente iterar sobre o grid duas vezes em main. Por que isso falha? Observe que IntoIterator::into_iter assume a propriedade de self.

Corrija este problema implementando IntoIterator para &Grid e armazenando uma referĂȘncia ao Grid em GridIter.

O mesmo problema pode ocorrer para tipos da biblioteca padrĂŁo: for e in some_vector assumirĂĄ a propriedade de some_vector e iterarĂĄ sobre elementos owned desse vetor. Use for e in &some_vector em vez disso, para iterar sobre referĂȘncias aos elementos de some_vector.