在 这个问题中,出现了一个问题,可以通过将使用泛型类型参数的尝试更改为关联类型来解决这个问题。这引发了一个问题: “为什么关联类型在这里更合适?”这让我想知道更多。
引入关联类型的 RFC表示:
这个 RFC 通过以下方式澄清了特征匹配:
- 将所有特征类型参数视为 输入类型,以及
- 提供关联的类型,即 输出类型。
RFC 使用图形结构作为一个激励人心的例子,文件中也使用了这个例子,但是我承认没有充分认识到关联类型版本相对于类型参数化版本的好处。主要的是,distance
方法不需要关心 Edge
类型。这很好,但是对于拥有关联类型的理由似乎有点肤浅。
我发现关联类型在实践中使用起来非常直观,但是我发现自己在决定何时何地应该在自己的 API 中使用它们时非常困难。
在编写代码时,什么时候应该选择关联类型而不是泛型类型参数,什么时候应该选择相反的类型?