特征界限中的参考相关类型

时间:2015-05-23 12:03:51

标签: rust

我有一个特征,意在收紧对另一个特征的限制,例如:

trait AssocA {}
trait AssocB: AssocA {}
trait A { type MyAssoc: AssocA; }
trait B: A { type MyAssoc: AssocB; }

如果我使用的是泛型而不是关联类型,我可以告诉Rust MyAssoc在特征AB中是相同的:

trait AssocA {}
trait AssocB: AssocA {}
trait A<MyAssoc> where MyAssoc: AssocA {}
trait B<MyAssoc>: A<MyAssoc> where MyAssoc: AssocB { }

我如何对相关类型做同样的事情?

1 个答案:

答案 0 :(得分:1)

您可以通过Self引用实施类型,因为B: ASelf::MyAssoc已经存在。

trait B: A where Self::MyAssoc : AssocB {}

impl B for T {}未实施<T as A>::MyAssoc时,这会禁止AssocB(example)