为什么在使用 futures::ok 时出现错误 "cannot infer type"?
Why do I get the error "cannot infer type" when using futures::ok?
我知道有 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());
}
我收到这个错误:
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type
问题是任何未来在理论上都可能return出错。所以 FutureResult
类型(从 fut_ok
编辑而来 return)是具有两个类型参数的泛型:一个类型 T
表示成功,一个类型 E
表示错误.
如果这是真实代码而不是玩具示例,您将有一些错误处理代码,允许编译器推断类型 E
。在这种情况下,您需要指定它,但由于您不使用它,您可以使用空类型 ()
。因此,以下任一方法都应该有效:
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
或
let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];
请注意,第一个是编译器表示的意思:"consider giving tasks
a type"。
完整示例
extern crate futures; // 0.1.25
use futures::future::ok as fut_ok;
use futures::future::FutureResult;
fn main() {
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(
"{:?}",
futures::future::join_all(tasks).wait().map_err(|_| "Error")
);
}
打印 Ok([1, 2, 3])
我知道有 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());
}
我收到这个错误:
let tasks = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
----- ^^^^^^ cannot infer type for `E`
|
consider giving `tasks` a type
问题是任何未来在理论上都可能return出错。所以 FutureResult
类型(从 fut_ok
编辑而来 return)是具有两个类型参数的泛型:一个类型 T
表示成功,一个类型 E
表示错误.
如果这是真实代码而不是玩具示例,您将有一些错误处理代码,允许编译器推断类型 E
。在这种情况下,您需要指定它,但由于您不使用它,您可以使用空类型 ()
。因此,以下任一方法都应该有效:
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
或
let tasks = vec![fut_ok::<_, ()>(1), fut_ok(2), fut_ok(3)];
请注意,第一个是编译器表示的意思:"consider giving tasks
a type"。
完整示例
extern crate futures; // 0.1.25
use futures::future::ok as fut_ok;
use futures::future::FutureResult;
fn main() {
let tasks: Vec<FutureResult<_, ()>> = vec![fut_ok(1), fut_ok(2), fut_ok(3)];
println!(
"{:?}",
futures::future::join_all(tasks).wait().map_err(|_| "Error")
);
}
打印 Ok([1, 2, 3])