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)
他们简要地解释了它的每一个部分,但它们没有解释为什么move在thread::spawn()调用中似乎有一个指令和一个逻辑OR :
这个闭包需要一个额外的注释,移动,以指示闭包将取得它捕获的值的所有权.
但是,这个"注释"看起来与其他注释不同,例如类型.这里到底发生了什么,为什么?(搜索该代码片段似乎并没有指向任何地方,只有相同的文档和其他博客文章关于其他类型的moveing.)
Chr*_*gan 10
通过引用捕获的闭包是形式的|ARGUMENTS| EXPRESSION.
按值捕获的闭包是形式move |ARGUMENTS| EXPRESSION.
move是目前仅在该位置使用的关键字.
接受没有参数的闭包看起来像逻辑OR运算符有点不幸,但这就是它的方式.它没有语法模糊性.