【发布时间】:2021-12-29 02:57:45
【问题描述】:
假设我有以下特征,我有一堆具体的实现。对于每个具体的 TokenParser,它只有一个具体的 TokenHolder。
trait Token {}
trait TokenHolder<T: Token> {}
trait TokenParser<H: TokenHolder<T>, T: Token> {}
我有一堆使用 TokenParser 的代码,并希望减少我拥有的样板数量。我觉得应该有办法做到这一点
trait TokenParser<H: TokenHolder<T: Token>> {}
// or
trait TokenParser<H: TokenHolder<T>> where T: Token {}
【问题讨论】:
-
问题在于泛型与您所描述的完全相反的行为:多个
impls具有不同的泛型。你使用了错误的工具。您应该使用关联类型。见their RFC。 -
感谢您为我指明此模式的正确名称。问题中的示例实际上是对我之前在 TokenHolder 不是通用的情况下的改进,并且我到处传递
Hs 和Ts 没有任何强制它们的耦合????♂️。跨度>