Rust docs 中有一个关于并发的学习练习,代码如下:

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();
}

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



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

最佳答案

通过引用捕获的闭包采用 |ARGUMENTS| EXPRESSION 形式。

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

有点不幸的是,不接受任何参数的闭包看起来像逻辑 OR 运算符,但这就是它的方式。它没有句法歧义。

关于syntax - `move ||` 习语的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31912151/

10-13 09:40