Closures mit Parametern
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 61 von 66.
Während Closures, die keine Parameter entgegennehmen, nützlich sind, werden Sie meistens Daten an Ihre Closures übergeben wollen, um sie flexibler und leistungsfähiger zu machen. Das Hinzufügen von Parametern zu Closures folgt demselben Muster, das Sie zuvor gelernt haben, jedoch mit Werten innerhalb der vertikalen Striche.
So definieren Sie einen Closure, der einen Parameter akzeptiert:
let add_one = |x: i32| x + 1;Beachten Sie, dass der Parameter x zwischen den vertikalen Strichen steht, genau wie Funktionsparameter. Sie können diesen Closure dann aufrufen, indem Sie einen Wert übergeben:
let add_one = |x: i32| x + 1;
let result = add_one(5); // Ergebnis ist 6Für Closures mit mehreren Parametern trennen Sie diese durch Kommas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // Ergebnis ist 12Aufgabe
EinfachSie erhalten zwei Eingaben. Die erste Eingabe ist eine Zahl, und die zweite Eingabe ist ebenfalls eine Zahl. Erstellen Sie eine Closure, die zwei Parameter entgegennimmt und die Potenz berechnet (der erste Parameter erhoben in den zweiten Parameter). Speichern Sie die Closure in einer Variablen, rufen Sie sie mit den Eingabewerten auf und geben Sie das Ergebnis aus.
Anforderungen:
- Lesen Sie die erste Eingabe (Basiszahl) ein und entfernen Sie Leerzeichen
- Parsen Sie diese zu
i32 - Lesen Sie die zweite Eingabe (Exponent) ein und entfernen Sie Leerzeichen
- Parsen Sie diese zu
u32 - Erstellen Sie eine Closure mit zwei Parametern, die die Potenz mithilfe der Methode
.pow()berechnet - Speichern Sie die Closure in einer Variablen
- Rufen Sie die Closure mit beiden Eingabewerten auf
- Geben Sie das Ergebnis aus
Eingabe:
- Erste Zeile: Eine Basiszahl (z. B.
2) - Zweite Zeile: Ein Exponent (z. B.
3)
Ausgabe:
- Das Ergebnis der Potenzberechnung
Spickzettel
Closures können Parameter akzeptieren, indem man sie zwischen die vertikalen Striche || setzt:
let add_one = |x: i32| x + 1;
let result = add_one(5); // Ergebnis ist 6Bei mehreren Parametern trennen Sie diese durch Kommas:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // Ergebnis ist 12Probier es selbst
use std::io;
fn main() {
// Erste Eingabe lesen (Basiszahl)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// Zweite Eingabe lesen (Exponent)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Erstelle ein Closure, das die Potenz berechnet, und speichere es in einer Variablen
// TODO: Rufe das Closure mit Basis und Exponent auf
// Ergebnis ausgeben
println!("{}", result);
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen7Fehlerbehandlung mit 'Result'
Was ist ein 'Result'?'match' mit 'Result' verwendenis_ok() und is_err()Abkürzungen: unwrap und expectDer Fragezeichen-Operator '?'Strings in Zahlen parsenZusammenfassung – Sichere Divisionsfunktion10Closures & Anonyme Funktionen
Was ist ein Closure?Ein einfaches Closure definierenClosures mit ParameternDie Umgebung erfassenRückblick – Einfaches Adder-Closure2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code