请用自我介绍来解释这个特点

  • 本文关键字:解释 自我介绍 rust
  • 更新时间 :
  • 英文 :


我认为这个特性是传递引用到异步函数的一种方式。我不明白

trait AsyncSingleArgFnOnce<Arg>: FnOnce(Arg) -> <Self as AsyncSingleArgFnOnce<Arg>>::Fut {
type Fut: Future<Output = <Self as AsyncSingleArgFnOnce<Arg>>::Output>;
type Output;
}

我特别不理解在函数return中引用trait的超级trait。

看起来很多trait文本都是在正确的地方使用关联类型。

首先,我们有一个性状AsyncSingleArgFnOnce,它有一个泛型参数Arg

关联类型Output,指定async fn声明的返回类型。

然后它有另一个关联类型Fut,它指定async fn的实际返回类型。记住:

async fn foo() -> Bar { ... }

实际上是:

fn foo() -> impl Future<Output = Bar> { async move { ... } }

所以OutputBar,Futimpl Future

此关联类型被约束为输出类型为<Self as AsyncSingleArgFnOnce<Arg>>::Output的future (type Fut: Future<Output = ...>)。AsyncSingleArgFnOnce<Arg>就是性状本身;<Self as AsyncSingleArgFnOnce<Arg>>::Output是实现类型的特性AsyncSingleArgFnOnce的完全限定Output关联类型。也就是说,只是关联类型Output的值。

性状具有FnOnce(Arg) -> ...作为超性状,这意味着它需要是一个函数(FnOnce),它接受Arg(泛型参数)并返回<Self as AsyncSingleArgFnOnce<Arg>>::Fut。和<Self as AsyncSingleArgFnOnce<Arg>>::Output一样,它只表示关联类型Fut的值。

所以我们有一个trait,它需要一个函数,只有一个参数和一个未来返回类型。返回的future类型为Fut;声明的返回类型为关联类型Output

最新更新