无法访问关联的类型

  • 本文关键字:类型 关联 访问 rust
  • 更新时间 :
  • 英文 :


我有一个类型,它被定义为绑定在另一个关联类型上的特征的关联类型。由于某些原因,编译器拒绝找到它。

trait B {
type A;
}
trait C {
type X: B;
fn foo(&self) -> &Self::X::A;
}
error[E0223]: ambiguous associated type
--> src/lib.rs:7:23
|
7 |     fn foo(&self) -> &Self::X::A;
|                       ^^^^^^^^^^ help: use fully-qualified syntax: `<<Self as C>::X as Trait>::A`

您需要为trait使用完全限定语法:

trait B {
type A;
}
trait C {
type X: B;
fn foo(&self) -> &<Self::X as B>::A;
}

lcnr对Rust zlip的解释:

iircType::Assoc1::Assoc2不工作而需要<Type::Assoc1 as Trait>::Assoc2的原因是我们(目前)在名称解析过程中找出了关联类型属于哪个特征,这在编译过程中很早就发生了。这意味着如果没有一些hack,我们还不能推断哪些特性是被实现的等等。

所以即使Assoc2可能是明确的我们仍然需要用户的显式注释

最新更新