我有一个特征,意在收紧对另一个特征的限制,例如:
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 { }
我如何对相关类型做同样的事情?
答案 0 :(得分:1)
您可以通过Self
引用实施类型,因为B: A
,Self::MyAssoc
已经存在。
trait B: A where Self::MyAssoc : AssocB {}
当impl B for T {}
未实施<T as A>::MyAssoc
时,这会禁止AssocB
。 (example)