[]Keyword move

Capture a closure's environment by value.

move converts any variables captured by reference or mutable reference to owned by value variables. The three Fn trait's mirror the ways to capture variables, when move is used, the closures is represented by the FnOnce trait.

let capture = "hello";
let closure = move || {
    println!("rust says {}", capture);
};
Run

move is often used when threads are involved.

let x = 5;

std::thread::spawn(move || {
    println!("captured {} by value", x)
}).join().unwrap();

// x is no longer available
Run

move is also valid before an async block.

let capture = "hello";
let block = async move {
    println!("rust says {} from async block", capture);
};
Run

For more information on the move keyword, see the closure's section of the Rust book or the threads section