Borrowing in Schleifen
Teil des Abschnitts Fundamentals der Rust-Journey von Coddy — Lektion 67 von 75.
In Rust hat jeder Wert einen Besitzer, und wenn Sie einen Wert in einer Schleife verwenden, muss Rust wissen, ob Sie ihn ausleihen (ihn nur vorübergehend ansehen) oder den Besitz übernehmen (ihn verbrauchen) möchten.
Dies ist wichtig, da wenn eine Schleife das Eigentum (Ownership) an Ihren Daten übernimmt, Sie diese Daten nach dem Ende der Schleife nicht mehr verwenden können. Das Verständnis dieses Unterschieds ist der Schlüssel zum korrekten Schreiben von Schleifen in Rust.
Betrachten Sie beispielsweise die folgenden Daten:
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Methode 1: Die Daten ansehen (unter Verwendung von &):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);Methode 2: Übernahme der Daten (ohne &):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Dies würde einen Fehler verursachenStellen Sie es sich so vor:
- Die Verwendung von
&ist wie das Betrachten eines Fotoalbums: Sie können alle Fotos sehen, aber das Album bleibt intakt - Die Nichtverwendung von
&ist wie das Herausnehmen der Fotos: Sie können sie verwenden, aber das Album ist danach leer
Nun dieser Stil:
for num in numbers.iter() {}Ist ähnlich wie dies:
for num in &numbers {}Und eine Mutationsschleife:
for num in numbers.iter_mut() {
*num *= 2;
}Kann auch so geschrieben werden:
for num in &mut numbers {
*num *= 2;
}Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Fundamentals
4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorArithmetische AbkürzungenVergleichsoperatorenString-Vergleich7Grundlagen IO
Ausgabe in die KonsoleBenutzereingaben lesenWiederholung - Bis 120Wiederholung - Wahr oder Falsch5Operatoren Teil 2
Logische Operatoren Teil 1Logische Operatoren Teil 2Wiederholung - Einfache LogikLogische Operatoren Teil 311Funktionen
Funktionen deklarierenParameter und ArgumenteRückgabewerteMehrere RückgabewerteWiederholung - Sigma-FunktionWiederholung - Validierungsfunktion14Iterieren über Arrays
Range-LeitfadenErweiterte For-SchleifeBorrowing in SchleifenGängige Array-Operationen3Variablen Teil 2
TypdeklarationNamenskonventionenTypinferenzRückblick - Variablen initialisierenTypumwandlung6Entscheidungsfindung
If-AusdrückeIf-ElseMatch-AnweisungZusammenfassung - If-ElseVerschachteltes If-Else9Schleifen
For-Schleife über SerienWhile-SchleifeBreakContinueVerschachtelte SchleifenSchleifen-LabelsEndlosschleifeRückblick – Dynamische Eingabe