rust / beginner
Snippet
Closures: Anonyme Funktionen in Rust
Closures sind anonyme Funktionen, die ihre Umgebung erfassen können. Sie werden mit |params| Ausdruckssyntax definiert. Rust leitet Typen ab, wenn möglich. Closures werden häufig mit Iteratoren (map, filter) verwendet und können Variablen aus ihrem umgebenden Scope erfassen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
fn main() {// Closure that adds 10 to a numberlet add_ten = |x: i32| -> i32 { x + 10 };// Closure with multiple parameterslet sum = |a: i32, b: i32| a + b;// Using closures with iteratorslet numbers = vec![1, 2, 3, 4, 5];let doubled: Vec<i32> = numbers.iter().map(|n| n * 2).collect();// Closure capturing environmentlet factor = 3;let scaled: Vec<i32> = numbers.iter().map(|n| n * factor).collect();// Using filter with closurelet evens: Vec<i32> = numbers.into_iter().filter(|n| n % 2 == 0).collect();println!("Add ten: {}", add_ten(5));println!("Sum: {}", sum(3, 4));println!("Doubled: {:?}", doubled);println!("Scaled by {}: {:?}", factor, scaled);println!("Evens: {:?}", evens);}
Erklärung
1
let add_ten = |x: i32| -> i32 { x + 10 };
Closure mit expliziten Typannotationen, gibt x + 10 zurück
2
let sum = |a: i32, b: i32| a + b;
Closure mit implizitem Rückgabe (letzter Ausdruck ist Rückgabewert)
3
.map(|n| n * 2)
Iterator-Methode, die Closure auf jedes Element anwendet
4
let factor = 3; let scaled: Vec<i32> = ... |n| n * factor
Closure erfasst 'factor' aus der Umgebung (borrow)
5
.filter(|n| n % 2 == 0)
Iterator-Methode, die nur Elemente behält, wo Closure true zurückgibt