在特征边界中引用关联类型
Reference associated type in trait bounds
我有一个特质,旨在加强对另一个特质的约束,例如:
trait AssocA {}
trait AssocB: AssocA {}
trait A { type MyAssoc: AssocA; }
trait B: A { type MyAssoc: AssocB; }
如果我使用泛型而不是关联类型,我可以告诉 Rust MyAssoc
在特征 A
和 B
中是相同的:
trait AssocA {}
trait AssocB: AssocA {}
trait A<MyAssoc> where MyAssoc: AssocA {}
trait B<MyAssoc>: A<MyAssoc> where MyAssoc: AssocB { }
如何对关联类型执行相同的操作?
您可以通过 Self
参考实现类型,因为 B: A
,Self::MyAssoc
已经存在。
trait B: A where Self::MyAssoc : AssocB {}
当 <T as A>::MyAssoc
未实现 AssocB
时,这将禁止 impl B for T {}
。 (example)
我有一个特质,旨在加强对另一个特质的约束,例如:
trait AssocA {}
trait AssocB: AssocA {}
trait A { type MyAssoc: AssocA; }
trait B: A { type MyAssoc: AssocB; }
如果我使用泛型而不是关联类型,我可以告诉 Rust MyAssoc
在特征 A
和 B
中是相同的:
trait AssocA {}
trait AssocB: AssocA {}
trait A<MyAssoc> where MyAssoc: AssocA {}
trait B<MyAssoc>: A<MyAssoc> where MyAssoc: AssocB { }
如何对关联类型执行相同的操作?
您可以通过 Self
参考实现类型,因为 B: A
,Self::MyAssoc
已经存在。
trait B: A where Self::MyAssoc : AssocB {}
当 <T as A>::MyAssoc
未实现 AssocB
时,这将禁止 impl B for T {}
。 (example)