capypad
0 Tage Serie
rust / intermediate
Snippet

Umgebung mit 'move' Closures einfangen

Das Schlüsselwort 'move' zwingt eine Closure dazu, das Eigentum an den Variablen zu übernehmen, die sie aus der Umgebung einfängt, anstatt sie nur auszuleihen. Dies ist oft erforderlich, wenn Closures an neue Threads übergeben werden.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
fn main() {
let data = vec![1, 2, 3];
let closure = move |x: i32| {
println!("Data from environment: {:?}", data);
data.contains(&x)
};
 
println!("Result: {}", closure(2));
// println!("{:?}", data); // Error: value moved
}
Erklärung
1
move |x: i32|
Gibt an, dass die Closure das Eigentum an den eingefangenen Variablen übernimmt.
2
data.contains(&x)
Die Closure verwendet den eingefangenen 'data'-Vektor, der in ihren Scope verschoben wurde.