Emprunt dans une boucle
Fait partie de la section Fundamentals du Journey Rust de Coddy — leçon 67 sur 75.
Lorsque nous écrivons une boucle en Rust, nous avons deux manières principales de travailler avec nos données : nous pouvons les consulter (en utilisant &) ou les prendre. Par exemple, considérons les données suivantes :
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Méthode 1 : Consulter 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 erreurPensez-y de cette façon :
- Utiliser
&c'est comme regarder un album photo : vous pouvez voir toutes les photos, mais l'album reste intact
- Ne pas utiliser
&c'est comme retirer les photos : vous pouvez les utiliser, mais l'album sera vide après
Maintenant ce style :
for num in numbers.iter() {}Est semblable à ceci :
for num in &numbers {}Et une boucle de mutation :
for num in numbers.iter_mut() {
*num *= 2;
}Peut également s'écrire ainsi :
for num in &mut numbers {
*num *= 2;
}Aide-mémoire
Dans les boucles Rust, vous pouvez soit consulter les données (en utilisant &), soit en prendre possession :
Consulter les données (emprunt) :
let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
sum += number;
}
// numbers peut encore être utilisé après la bouclePrendre possession :
let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
sum += number;
}
// numbers ne peut plus être utilisé après la boucleMéthodes d'itérateur :
// Ceux-ci sont équivalents :
for num in numbers.iter() {}
for num in &numbers {}
// Pour la mutation :
for num in numbers.iter_mut() { *num *= 2; }
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 Fundamentals
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 - Format