无法移出共享引用后面的“*h”

Mat*_*ner 2 rust

JoinHandle我正在尝试使用 来调用 join 的向量for_each。我收到此错误:

let mut threads = vec![];
...
threads.iter().for_each(|h| h.join().unwrap());

error[E0507]: cannot move out of `*h` which is behind a shared reference
  --> src/main.rs:41:33
   |
41 |     threads.iter().for_each(|h| h.join().unwrap());
   |                                 ^ move occurs because `*h` has type `std::thread::JoinHandle<()>`, which does not implement the `Copy` trait
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我得到了对JoinHandles by 的引用,这应该可以正常工作for_each,但似乎我没有。下面的代码工作正常:

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

我该如何做同样的事情,但使用for_each或类似的东西?

Psi*_*dom 5

你需要into_iter而不是iter. 您只能iter获取项目的引用,而join有一个签名pub fn join(self) -> Result<T>,需要拥有的数据作为参数:

threads.into_iter().for_each(|h| { h.join().unwrap(); });
Run Code Online (Sandbox Code Playgroud)

应该管用。