繁体   English   中英

不能从类型为“()”的元素的迭代器构建

[英]cannot be built from an iterator over elements of type `()`

该程序用于打印并行运行的线程。 在结束线程之前打印所有开始线程。 但是这个程序抛出错误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);
}

铁锈游乐场

如果您希望隐式返回 function(无论是顶级 function 还是闭包)的最后一个值,则不应以分号结尾。 分号终止正在运行的效果语句,而不是返回 function 的最终表达式。替换

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM