capypad
0 Tage Serie
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
rust
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 number
let add_ten = |x: i32| -> i32 { x + 10 };
// Closure with multiple parameters
let sum = |a: i32, b: i32| a + b;
// Using closures with iterators
let numbers = vec![1, 2, 3, 4, 5];
let doubled: Vec<i32> = numbers.iter().map(|n| n * 2).collect();
// Closure capturing environment
let factor = 3;
let scaled: Vec<i32> = numbers.iter().map(|n| n * factor).collect();
// Using filter with closure
let 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