Rust 为什么在使用futures::ok时出现错误“无法推断类型”?
我知道有join_all,但它无法推断类型:Rust 为什么在使用futures::ok时出现错误“无法推断类型”?,rust,future,Rust,Future,我知道有join_all,但它无法推断类型: extern crate futures; // 0.1.25 use futures::future::ok as fut_ok; fn main() { let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)]; println!("{:?}", futures::future::join_all(tasks).wait().unwrap()); } 我得到了这个错误: 让任务=ve
extern crate futures; // 0.1.25
use futures::future::ok as fut_ok;
fn main() {
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!("{:?}", futures::future::join_all(tasks).wait().unwrap());
}
我得到了这个错误:
让任务=vec![fut_ok1,fut_ok2,fut_ok3];
---^^^^无法推断“E”的类型`
|
考虑“任务”类型
问题是,任何未来理论上都可能返回一个错误。因此,从fut_ok返回的futuresult类型是泛型的,有两个类型参数:T类型表示成功,E类型表示错误 如果这是真实的代码而不是玩具示例,则会有一些错误处理代码,允许编译器推断类型E。在这种情况下,您需要指定它,但由于您不使用它,因此可以使用空类型。因此,以下任何一项都应该起作用:
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
或
注意,第一个是编译器所说的:考虑赋予任务一个类型。
问题是,任何未来在理论上都可能返回一个错误。因此,从fut_ok返回的futuresult类型是泛型的,有两个类型参数:T类型表示成功,E类型表示错误 如果这是真实的代码而不是玩具示例,则会有一些错误处理代码,允许编译器推断类型E。在这种情况下,您需要指定它,但由于您不使用它,因此可以使用空类型。因此,以下任何一项都应该起作用:let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
或
注意,第一个是编译器所说的内容:考虑赋予任务一个类型。
完整的例子
外部板条箱期货;//0.1.25 使用futures::future::ok作为fut_ok; 使用futures::future::FutureResult; fn干线{ 让任务:Vec=Vec![fut_ok1,fut_ok2,fut_ok3]; 普林顿! {:?}, 未来::未来::加入所有任务。等待。映射错误 ; } 打印正常[1,2,3]完整示例 外部板条箱期货;//0.1.25 使用futures::future::ok作为fut_ok; 使用futures::future::FutureResult; fn干线{ 让任务:Vec=Vec![fut_ok1,fut_ok2,fut_ok3]; 普林顿! {:?}, 未来::未来::加入所有任务。等待。映射错误 ; }打印OK(1, 2, 3)< /P>是否考虑将任务赋予一种类型?让任务:Vec=Vec![fut_-ok1u32,fut_-ok2,fut_-ok3];或者让tasks=vec![fut_ok::1,fut_ok 2,fut_ok 3];你是否考虑过把任务赋予一种类型?让任务:Vec=Vec![fut_-ok1u32,fut_-ok2,fut_-ok3];或者让tasks=vec![fut_ok::1,fut_ok 2,fut_ok 3];美好的如何打印结果?普林顿!{:?},futures::future::加入所有任务。等等?;nice没有实现trait std::error::error。如何打印结果?普林顿!{:?},futures::future::加入所有任务。等等?;未为实现trait std::error::error