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>> [−]