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
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 referencelet print_x = || println!("x = {}", x);print_x();// Closure capturing by mutable referencelet mut counter = 0;let increment = || {counter += 1;println!("counter = {}", counter);};increment();increment();// Higher-order function using Fnfn 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