capypad
0 Tage Serie
rust / intermediate
Snippet

Closures: Umgebung erfassen und Fn-Traits

Rust-Closures sind anonyme Funktionen, die ihre Umgebung erfassen können. Sie implementieren eines von drei Traits: Fn (unveränderliches Leihen), FnMut (veränderliches Leihen) oder FnOnce (nimmt Besitz). Das Verständnis dieser Traits ist unerlässlich für das Schreiben von Higher-Order-Funktionen und effektives Speichermanagement.

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
fn main() {
let x = 10;
// Closure capturing by reference
let print_x = || println!("x = {}", x);
print_x();
// Closure capturing by mutable reference
let mut counter = 0;
let increment = || {
counter += 1;
println!("counter = {}", counter);
};
increment();
increment();
// Higher-order function using Fn
fn apply<F>(f: F) where F: Fn() {
f();
}
apply(print_x);
}
Erklärung
1
let x = 10;
Variablenbindung für spätere Closure-Erfassung
2
let print_x = || println!("x = {}", x);
Closure erfasst x durch Referenz, implementiert Fn-Trait
3
let mut counter = 0;
Veränderlicher Zähler für Closure-Mutations-Demonstration
4
let increment = || { counter += 1; ... }
Closure erfasst counter durch veränderliche Referenz, implementiert FnMut
5
fn apply<F>(f: F) where F: Fn()
Generische Funktion, die jede Closure akzeptiert, die Fn implementiert