Menu
Coddy logo textTech

Borrowing in Schleifen

Teil des Abschnitts Fundamentals der Rust-Journey von Coddy — Lektion 67 von 75.

Wenn wir in Rust eine Schleife schreiben, haben wir zwei Hauptmöglichkeiten, mit unseren Daten zu arbeiten: wir können sie uns ansehen (mit &) oder sie übernehmen. Betrachten Sie zum Beispiel die folgenden Daten:

let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;

Methode 1: Betrachten der Daten (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 verursachen

Stellen Sie es sich so vor:

  1. Die Verwendung von & ist wie das Betrachten eines Fotoalbums: Sie können alle Fotos sehen, aber das Album bleibt unversehrt
  1. Das Nichtverwenden von & ist so, als würde man die Fotos herausnehmen: Man kann sie zwar verwenden, aber das Album ist danach leer

Nun dieser Stil:

for num in numbers.iter() {}

Ist ähnlich wie:

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;
}

Spickzettel

In Rust-Schleifen können Sie Daten entweder betrachten (mit &) oder den Besitz (Ownership) daran übernehmen:

Daten betrachten (Ausleihen):

let numbers = vec![1, 2, 3, 4, 5];
for number in &numbers {
    sum += number;
}
// numbers can still be used after the loop

Besitz übernehmen:

let numbers = vec![1, 2, 3, 4, 5];
for number in numbers {
    sum += number;
}
// numbers cannot be used after the loop

Iterator-Methoden:

// These are equivalent:
for num in numbers.iter() {}
for num in &numbers {}

// For mutation:
for num in numbers.iter_mut() { *num *= 2; }
for num in &mut numbers { *num *= 2; }

Probier es selbst

Diese Lektion enthält keine Programmieraufgabe.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Fundamentals