Dzisiaj chciałem dowiedzieć się o supertypes z List
:Przegrana w wykresie spadku zbiorów Scala
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
Wow, tak List
ma już pięć natychmiastowe supertypes. Załóżmy, wybrać jedną losowo:
trait LinearSeq[+A] extends Seq[A]
with scala.collection.LinearSeq[A]
with GenericTraversableTemplate[A, LinearSeq]
with LinearSeqLike[A, LinearSeq[A]]
Okay, wybrać jedną z najbardziej podobnej nazwie:
trait LinearSeqLike[+A, +Repr <: LinearSeqLike[A, Repr]] extends SeqLike[A, Repr]
Ach, wydaje się że jesteśmy coraz gdzieś tylko jeden supertypem lewej:
trait SeqLike[+A, +Repr] extends Any
with IterableLike[A, Repr]
with GenSeqLike[A, Repr]
with Parallelizable[A, ParSeq[A]]
W tym momencie poddałem się. Jak głęboki jest ten wykres? Które z tych supertypów są koncepcyjnie istotne, a które z nich to tylko szczegóły dotyczące implementacji lub sztuczki optymalizacyjne?
Jak ma sens taki ogromny wykres dziedziczenia?
Cóż, najpierw upewnij się, że masz racje żelaza, latarka, a dziesięć stóp słup, a potem zejść, grzebie w rzeczach, aby upewnić się, że nie są pułapką .... Więcej poważnie, hierarchia jest ogromna kolekcje i większość z nich faktycznie robi coś koncepcyjnie. To nie jest łatwe. Przynajmniej większość typów wyjaśnia teraz na górze swoich dokumentów, do czego służą. (Chodzi o kolejne trzy lub cztery poziomy, zanim odkryjesz coś takiego jak "GenTraversableOnce".) –
Jeśli interesujesz się tylko częściami interfejsu API kolekcji (lub rozgrzewaniem przed obejrzeniem wnętrza), dobrym początkiem jest ta grupa wykresów dziedziczenia: http://www.decodified.com/scala/collections-api.xml; nie jest całkowicie aktualny, ale na szczęście nie stał się jeszcze przestarzały. – gourlaysama
@gourlaysama To są ładne diagramy, ale nie mogę znaleźć 'AbstractSeq',' Product', 'GenericTraversableTemplate',' LinearSeqOptimized', 'LinearSeqLike',' SeqLike', 'IterableLike',' GenSeqLike' lub 'Parallelizable'. .. – fredoverflow