Keyword move[−][src]
Expand description
按值捕获 闭包 的环境。
move
将任何通过引用捕获的变量转换为通过引用捕获的变量。
let data = vec![1, 2, 3]; let closure = move || println!("captured {:?} by value", data); // 数据不再可用,它由闭包拥有Run
Note: 即使 move
闭包通过 move
捕获变量,它们仍然可以实现 Fn
或 FnMut
。
这是因为由闭包类型实现的 traits 是由闭包对捕获的值进行的操作 (而不是对捕获值的方式) 确定的:
fn create_fn() -> impl Fn() { let text = "Fn".to_owned(); move || println!("This is a: {}", text) } let fn_plain = create_fn(); fn_plain();Run
move
涉及 线程 时经常使用。
let data = vec![1, 2, 3]; std::thread::spawn(move || { println!("captured {:?} by value", data) }).join().unwrap(); // 数据被移动到衍生线程,所以我们不能在这里使用它Run
move
在异步块之前也有效。
let capture = "hello".to_owned(); let block = async move { println!("rust says {} from async block", capture); };Run