Emprunt dans une boucle
Fait partie de la section Fondamentaux du Journey Rust de Coddy. Leçon 67 sur 75.
En Rust, chaque valeur a un propriétaire, et lorsque tu utilises une valeur dans une boucle, Rust doit savoir si tu veux l’emprunter (simplement la consulter temporairement) ou en prendre possession (la consommer).
C’est important, car si une boucle prend possession de vos données, vous ne pouvez plus les utiliser après la fin de la boucle. Comprendre cette distinction est essentiel pour écrire correctement des boucles en Rust.
Par exemple, considérons les données suivantes :
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Méthode 1 : Examiner les données (en utilisant &) :
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);Méthode 2 : prendre les données (sans &) :
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Cela provoquerait une erreurImagine les choses ainsi :
- Utiliser
&, c’est comme regarder un album photo : tu peux voir toutes les photos, mais l’album reste intact - Ne pas utiliser
&, c’est comme retirer les photos : tu peux les utiliser, mais l’album sera vide ensuite
Maintenant, ce style :
for num in numbers.iter() {}Est similaire à ceci :
for num in &numbers {}Et une boucle de mutation, qui nécessite que le vecteur soit déclaré avec mut :
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}Peut également s’écrire ainsi :
for num in &mut numbers {
*num *= 2;
}Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloRaccourcis arithmétiquesOpérateurs de comparaisonComparaison de chaînes7Entrées/Sorties de base
Afficher dans la consoleLire la saisie utilisateurRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux5Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 311Fonctions
Déclaration de fonctionsParamètres et argumentsValeurs de retourValeurs de retour multiplesRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validation14Parcourir les tableaux
Guide sur les RangeBoucle for amélioréeEmprunt dans une boucleOpérations courantes sur les tableaux3Variables - Partie 2
Déclaration de typeConventions de nommageInférence de typeRécapitulatif - Initialiser des variablesConversion de type9Boucles
Boucle For sur une sérieBoucle WhileBreakContinueBoucles imbriquéesÉtiquettes de boucleBoucle infinieRécapitulatif - Entrée dynamique12Bases des tableaux
Déclaration de tableauxTableau comme paramètreAccès aux élémentsModification de tableauxRécapitulatif - Affichage formaté d'un tableau15Opérations sur les chaînes
Méthodes de chaînesMacro format!Conversion de chaînesRécapitulatif - FormatEntraînez-vous par vous-même : Compilateur Rust en ligne