eco*_*coe 6 future rust rust-tokio tokio-postgres
我习惯了 Scala 的类型,在这种类型Future中,您可以包装要返回的任何对象来指定它。Future[..]
我的 Rust 函数hello返回Query,但我似乎无法将该结果作为 type 的参数传递Future<Output = Query>。为什么不呢?我应该如何更好地输入它?
当我尝试将未来作为参数传递时,就会发生失败:
use std::future::Future;
struct Person;
struct DatabaseError;
type Query = Result<Vec<Person>, DatabaseError>;
async fn hello_future(future: &dyn Future<Output = Query>) -> bool {
future.await.is_ok()
}
async fn hello() -> Query {
unimplemented!()
}
async fn example() {
let f = hello();
hello_future(&f);
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
编译失败并出现以下错误:
error[E0277]: `&dyn Future<Output = Result<Vec<Person>, DatabaseError>>` is not a future
--> src/main.rs:9:5
|
9 | future.await.is_ok()
| ^^^^^^^^^^^^ `&dyn Future<Output = Result<Vec<Person>, DatabaseError>>` is not a future
|
= help: the trait `Future` is not implemented for `&dyn Future<Output = Result<Vec<Person>, DatabaseError>>`
= note: required by `poll`
Run Code Online (Sandbox Code Playgroud)
async函数 desugar 返回一个实现该Future特征的不透明值。这意味着您可以接受实现该特征的泛型类型。最简洁的语法是impl Trait,但您也可以引入一个命名的泛型参数:
async fn hello_future(future: impl Future<Output = Query>) -> bool {
future.await.is_ok()
}
async fn example() {
let f = hello();
hello_future(f);
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
3202 次 |
| 最近记录: |