惯用语Scala:<Collection> Like和<Collection> Types之间的语义差异?

Rya*_*chi 8 naming scala scala-collections

正如这个问题的标题所暗示的那样:我的问题更多的是形式(惯用惯例)而不是功能.简洁地说:

MyCollectionLike和之间的语义差异是MyCollection什么?

作为例子:之间有什么区别StringLikeStringMapLikeMap.仔细观察Scala API文档,我可以说它XLike通常是超类型的X.但是,除此之外,我不清楚这些抽象层之间的语义差异.

在实践中,如果我正在创建一个新的类/特征,当我为所述类选择名称时,理解这种区别会很有帮助.

我提出的具体问题如下:

我要创建的特质:SurjectiveMap[K, T]它可以混在任一Map[K, Set[T]]MapLike[K, SetLike[T]].鉴于我不知道*Like和之间的语义差异*,我不知道该使用哪个.

om-*_*nom 3

与 IFoo 和 Foo、Bar 和 BarImpl 之间的区别相同(除了 TraversableLike 是包含实现的超级特征这一事实):

Scala 集合库通过使用通用构建器和在所谓的实现特征中遍历集合来避免代码重复并实现“相同结果类型”原则。这些特征以 Like 后缀命名;例如,IndexedSeqLike 是 IndexedSeq 的实现特征,类似地,TraversableLike 是 Traversable 的实现特征。Traversable 或 IndexedSeq 等集合类从这些特征继承了所有具体方法实现。

来自Scala 集合架构