我有一个类型,它被定义为绑定在另一个关联类型上的特征的关联类型。由于某些原因,编译器拒绝找到它。
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的解释:
iirc
Type::Assoc1::Assoc2
不工作而需要<Type::Assoc1 as Trait>::Assoc2
的原因是我们(目前)在名称解析过程中找出了关联类型属于哪个特征,这在编译过程中很早就发生了。这意味着如果没有一些hack,我们还不能推断哪些特性是被实现的等等。所以即使
Assoc2
可能是明确的我们仍然需要用户的显式注释