`move ||`成语的目的是什么?

bri*_*tar 4 syntax concurrency rust

Rust文档中,有一个关于并发的学习练习,使用以下代码:

let philosophers = vec![
    Philosopher::new("Judith Butler"),
    Philosopher::new("Gilles Deleuze"),
    Philosopher::new("Karl Marx"),
    Philosopher::new("Emma Goldman"),
    Philosopher::new("Michel Foucault"),
    ];

let handles: Vec<_> = philosophers.into_iter().map(|p| {
    thread::spawn(move || {
        p.eat();
    })
}).collect();

for h in handles {
    h.join().unwrap();
}
Run Code Online (Sandbox Code Playgroud)

他们简要地解释了它的每一个部分,但它们没有解释为什么movethread::spawn()调用中似乎有一个指令和一个逻辑OR :

这个闭包需要一个额外的注释,移动,以指示闭包将取得它捕获的值的所有权.

但是,这个"注释"看起来与其他注释不同,例如类型.这里到底发生了什么,为什么?(搜索该代码片段似乎并没有指向任何地方,只有相同的文档和其他博客文章关于其他类型的moveing.)

Chr*_*gan 10

通过引用捕获的闭包是形式的|ARGUMENTS| EXPRESSION.

按值捕获的闭包是形式move |ARGUMENTS| EXPRESSION.
move是目前仅在该位置使用的关键字.

接受没有参数的闭包看起来像逻辑OR运算符有点不幸,但这就是它的方式.它没有语法模糊性.