Closures
Anonyme Funktionen
Closures ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was ist eine Closure?
Eine Closure ist eine anonyme Funktion, die Sie in einer Variablen speichern und später aufrufen können. Sie wird mit senkrechten Strichen um die Parameter geschrieben.
fn main() {
let add_one = |x| x + 1;
println!("{}", add_one(4));
}Closure-Syntax
Die Parameter stehen zwischen |...|, gefolgt vom Funktionskörper. Bei einem einzelnen Ausdruck sind keine geschweiften Klammern erforderlich.
|x| x + 1— ein Parameter.|a, b| a + b— zwei Parameter.
fn main() {
let multiply = |a, b| a * b;
println!("{}", multiply(3, 5));
}Mehrzeilige Closures
Bei mehr als einer Anweisung schließen Sie den Funktionskörper wie bei einer Funktion in geschweifte Klammern ein.
fn main() {
let describe = |n: i32| {
let doubled = n * 2;
println!("{} doubled is {}", n, doubled);
};
describe(7);
}Die Umgebung erfassen
Im Gegensatz zu einer einfachen Funktion kann eine Closure Variablen aus dem umgebenden Gültigkeitsbereich erfassen und innerhalb der Closure verwenden.
fn main() {
let factor = 10;
let scale = |x| x * factor;
println!("{}", scale(5));
}Typinferenz bei Closures
Closures leiten ihre Parameter- und Rückgabetypen normalerweise daraus ab, wie sie verwendet werden, daher sind Typannotationen optional.
Bei Bedarf können Sie zur besseren Verständlichkeit Typen hinzufügen.
fn main() {
let greet = |name: &str| -> String {
format!("Hello, {}!", name)
};
println!("{}", greet("Rust"));
}Closures als Argumente
Viele Standardmethoden akzeptieren eine Closure. Beispielsweise wendet map eine Closure auf jedes Element an.
fn main() {
let nums = vec![1, 2, 3];
let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
println!("{:?}", doubled);
}Filtern mit Closures
Die Methode filter behält nur die Elemente, für die die Closure true zurückgibt.
fn main() {
let nums = vec![1, 2, 3, 4, 5, 6];
let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
println!("{:?}", evens);
}Closures speichern
Closures haben eindeutige anonyme Typen, aber Sie können sie in einer Variablen speichern und wiederverwenden.
fn main() {
let is_even = |n: i32| n % 2 == 0;
println!("{} {}", is_even(4), is_even(7));
}Closures und Funktionen im Vergleich
Unterschiede:
- Funktionen können keine Variablen aus dem umgebenden Gültigkeitsbereich erfassen, Closures dagegen schon.
- Closures sind anonym und oft kurz.
- Die Typen von Closures werden normalerweise abgeleitet.
fn main() {
let base = 100;
let bonus = |earned: i32| earned + base;
println!("{}", bonus(25));
}Berechnete Werte zurückgeben
Kombinieren Sie Closures mit Iteratoren, um Ergebnisse in einer klaren, ausdrucksstarken Pipeline zu berechnen.
fn main() {
let nums = vec![10, 20, 30];
let total: i32 = nums.iter().map(|x| x + 1).sum();
println!("total {}", total);
}Closures erfassen per Referenz
Standardmäßig leihen sich Closures die erfassten Variablen. Sie können diese danach weiterhin außerhalb lesen, sofern sie nur ausgeliehen wurden.
fn main() {
let name = String::from("Ada");
let printer = || println!("Name: {}", name);
printer();
println!("still usable: {}", name);
}Kurze Überprüfung
Rufen Sie sich eine wichtige Fähigkeit von Closures ins Gedächtnis.
Zusammenfassung
Closures in Rust:
- Anonyme Funktionen in der Form
|params| body. - Können Variablen aus ihrer Umgebung erfassen.
- Typen werden normalerweise abgeleitet.
- Werden häufig mit Iteratormethoden wie
mapundfilterverwendet.
fn main() {
let tax = 0.2;
let with_tax = |price: f64| price * (1.0 + tax);
println!("{}", with_tax(50.0));
}Häufig gestellte Fragen
Ist die Lektion „Closures“ kostenlos?
Ja — der vollständige Text von „Closures“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Closures“?
Anonyme Funktionen Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn Rust Coding zu starten?
Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Closures“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?
Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.