Rust Odyssey

Leçons
Login Rejoindre

x

Chapitre 6

Closures itérateurs et asynchrone

2. Itérateurs

Pourquoi s’intéresser aux itérateurs ?

En comprenant les itérateurs on va comprendre pourquoi ce qu’on passe dans une boucle for est parfois move.

C’est le cas dans cet exemple :

fn main() {
    let v = vec![String::from("a"), String::from("b")];

    for x in v {
        println!("{}", x);
        println!("{}", v.len());
        // erreur : car v a été déplacé à cause de 'for x in v'
    }
}

En réalité quand on utilise une boucle for rust va concrètement réécrire la boucle en utilisant des itérateurs sous le capot.

Voici comment Rust réécrit les boucles for en fonction de ce sur quoi l’on itère,

SyntaxeÉquivalentSignature simplifiéeComportement
for x in vv.into_iter()fn into_iter(self) -> IntoIter<T>move
for x in &vv.iter()fn iter(&self) -> Iter<'_, T>emprunt immuable
for x in &mut vv.iter_mut()fn iter_mut(&mut self) -> IterMut<'_, T>emprunt mutable

En regardant les signatures, on peut vite comprendre que into_iter va faire un move (car elle prend self et pas &self) alors que iter et iter_mut n’en font pas.

Tu veux en apprendre plus ? 👋

C'est la fin de la partie gratuite... 😔

Accède à l’intégralité de la formation, à un Discord francophone actif, à des résumés écrits et à toutes les futures mises à jour pour seulement 95€ !

Login Rejoindre