Rust 为什么在使用TryFuture而不是等效Future时会出现类型不匹配的错误?
我使用Rust 为什么在使用TryFuture而不是等效Future时会出现类型不匹配的错误?,rust,future,Rust,Future,我使用Future获得了以下工作代码 使用期货:{future,future}; fn fut_res()->impl Future{ 未来::确定::(()) } #[tokio::main] 异步fn main()->结果{ 如果让Err(e)=fut_res()等待{ println!(“{:?}”,e); } 好(()) } 根据我在文档中阅读的内容,我应该能够将代码更改为使用TryFuture,如下所示: 使用未来:{future,TryFuture}; fn try_fut()->
Future
获得了以下工作代码
使用期货:{future,future};
fn fut_res()->impl Future{
未来::确定::(())
}
#[tokio::main]
异步fn main()->结果{
如果让Err(e)=fut_res()等待{
println!(“{:?}”,e);
}
好(())
}
根据我在文档中阅读的内容,我应该能够将代码更改为使用TryFuture
,如下所示:
使用未来:{future,TryFuture};
fn try_fut()->impl TryFuture{
未来::确定::(())
}
#[tokio::main]
异步fn main()->结果{
如果let Err(e)=尝试(fut()。等待{
println!(“{:?}”,e);
}
好(())
}
编译器抱怨try\u fut
必须返回关联的类型Output
,但根据定义,此类型是Result
:
错误[E0308]:类型不匹配
-->src/lib.rs:9:12
|
9 |如果让错误(e)=尝试未来()。等待{
|^^^^应为关联类型,找到枚举'std::result::result'`
|
=注意:预期类型“::输出`
找到类型“std::result::result”`
=注意:考虑将关联类型“::输出”约束为“STD::结果::结果”或调用返回“:::输出”的方法
=注:有关更多信息,请访问https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
我如何向编译器解释这一点
不起作用,因为东京仍在alpha中,但还有一个合适的
货物。toml
您的语法目前不起作用。的文档显示,您必须暂时将结果
包装在轮询
中(重点是我的):
fn尝试轮询(
赛尔夫:平穆特,
cx:&mut上下文)->轮询[−]
将此TryFuture
作为未来进行投票
此方法是编译器限制的权宜之计,它阻止我们
直接从未来
特性继承;将来不会
需要。
当这个编译器限制解决后,这种方法将不再是必要的,您将能够做您所做的事情(或类似的事情)
工具书类
这很不令人满意,但我会接受。和未来相比,使用TryFuture
时的样板代码量是疯狂的。
fn try_poll(
self: PinMut<Self>,
cx: &mut Context ) -> Poll<Result<Self::Ok, Self::Error>> [−]