не может выйти из `* h` за общей ссылкой - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь вызвать join для вектора JoinHandle, используя 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

Насколько я могу сказать, это должно работать нормально, если бы мне дали ссылки на JoinHandle с for_each, но, похоже, я не. Следующий код работает нормально:

for h in threads {
    h.join().unwrap();
}

Как мне сделать то же самое, но с использованием for_each или чего-то подобного?

1 Ответ

1 голос
/ 08 ноября 2019

Вам нужно into_iter вместо iter. С iter вы получаете только ссылки на элементы, в то время как join имеет подпись как pub fn join(self) -> Result<T>, для которой в качестве параметра требуются собственные данные:

threads.into_iter().for_each(|h| { h.join().unwrap(); });

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...