fre*_*low 10 collections complexity-theory inheritance types scala
今天我想了解以下的超类型List:
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
Run Code Online (Sandbox Code Playgroud)
哇,所以List已经有五个直接超类型了.我们随机选一个:
trait LinearSeq[+A] extends Seq[A]
with scala.collection.LinearSeq[A]
with GenericTraversableTemplate[A, LinearSeq]
with LinearSeqLike[A, LinearSeq[A]]
Run Code Online (Sandbox Code Playgroud)
好的,让我们选择名称最相似的那个:
trait LinearSeqLike[+A, +Repr <: LinearSeqLike[A, Repr]] extends SeqLike[A, Repr]
Run Code Online (Sandbox Code Playgroud)
啊,似乎我们到了某个地方,只留下了一个超类型:
trait SeqLike[+A, +Repr] extends Any
with IterableLike[A, Repr]
with GenSeqLike[A, Repr]
with Parallelizable[A, ParSeq[A]]
Run Code Online (Sandbox Code Playgroud)
此时我放弃了.这张图有多深?所有这些超类型中哪一个在概念上是相关的,哪些只是实现细节或优化技巧?
如何理解如此巨大的遗传图?
大多数父母确实是实施细节和优化技巧.如果你不关心它,你可以忽略任何东西Like或者Template最后.将其应用于列表,我们有:List <: LinearSeq <: Seq <: Iterable <: Traversable.您应该在代码中使用这些特征作为参数类型(而不是实现特征).它们描述于:Scala Collections API
如果您想了解如何使用实现特征,或者设计自己的集合,您应该阅读本教程:Scala集合的体系结构.
此外,如果您想/需要知道实际实现给定方法的位置,请单击scaladoc中的方法签名以展开de description." 定义类"字段显示指向实施位置的链接.
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |