# [−]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