rust 不能从"()“类型元素的迭代器生成

tp5buhyn  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(132)

这个程序是用来打印并行运行线程的。在结束线程之前打印所有的开始线程。但是这个程序抛出了错误the trait FromIterator〈()〉is not implemented for Vec<JoinHandle<>> the trait FromIterator<T> is implemented for Vec<T>。这个程序有什么问题吗?任何反馈都很有帮助。

let handles: Vec<JoinHandle<String>> = (0..=10).map(|i| {
        let delay = rand::thread_rng().gen_range(10..=2000);
        let builder =
          thread::Builder::new().name(format!("Thread-{}", i));
        
        builder.spawn(move || {
          println!(
            "thread started = {}",
            thread::current().name().unwrap()
          );
          thread::sleep(Duration::from_millis(delay));
          thread::current().name().unwrap().to_owned()
        }).unwrap();
      }).collect();

for h in handles {
  let r = h.join().unwrap();
  println!("thread done = {:?}", r);
}

rust-playground

chhkpiq4

chhkpiq41#

如果你想隐式返回一个函数的最后一个值(无论是顶级函数还是闭包),你不应该用分号结束它。分号终止的是为了效果而运行的语句,而不是返回函数的最终表达式。替换

builder.spawn(move || {
  ...
}).unwrap();

builder.spawn(move || {
  ...
}).unwrap() // <- No semicolon :)

相关问题