10
votes

Perdu dans le graphique d'héritage des collections de Scala

Aujourd'hui, je voulais apprendre sur les Superypes de la liste code>:: xxx pré>

wow, donc list code> a déjà cinq superypes immédiats. Choisons un au hasard: P>

trait SeqLike[+A, +Repr] extends Any
                            with IterableLike[A, Repr]
                            with GenSeqLike[A, Repr]
                            with Parallelizable[A, ParSeq[A]]


4 commentaires

Eh bien, vous vous assurez d'abord que vous avez vos rations de fer, votre flambeau et votre pôle de dix pieds, puis vous descendez, percant des choses pour vous assurer qu'ils ne sont pas un piège .... plus sérieusement, la hiérarchie des collections est énorme et la plupart de Cela fait effectivement quelque chose de conceptuellement. Ce n'est pas facile. Au moins la plupart des types expliquent maintenant au sommet de leurs documents à ce qu'ils sont pour. (Il s'agit d'environ trois ou quatre niveaux avant de bas en bas dans des choses comme genttraversableonce .)


Si vous êtes juste intéressé par les parties de l'utilisateur de l'API de la collection (ou comme préchauffage avant de regarder avant de regarder les internes), un bon démarrage est ce groupe de graphiques d'héritage: décodified.com/scala/collections-api.xml ; Ce n'est pas complètement à jour, mais heureusement, il n'est pas encore obsolète.


@gourlaysama Ce sont de beaux diagrammes, mais je ne trouve pas de trouver abstractréseq , , , generictraverableemplate , linéarseqoptimized , , Linéarseqlike an , SEQLILE , iterablelike , GENSEQLIQue ou parallelizable là-bas ...


Dupliqué possible de Didacticiel de conception SCALA 2.8 Collections


3 Réponses :


1
votes

Une fois que vous avez atteint le SEQLILE , vous êtes presque là-bas - iterablelike a juste geniterablelike et trersblelike Au-dessus, TraversableLike n'a que TraversableOnce et GENDVERSABLELITINO ci-dessus.

et traverVableOnce a genttraverableAnce au-dessus de celui-ci, et c'est tout :)

Le lien que l'autre utilisateur fourni (également http: //docs.scala -Lang.org/overviews/collections/overview.html ) est une bonne référence - il vous suffit de savoir que chacun de ces types a un type * comme correspondant à la représentation. Paramètre de type REC .

Mais du point de vue des collections s'étendant, il vous suffit de trouver le type le plus spécifique que vous souhaitez étendre dans la plupart des cas, par exemple SEQLILE et étendre SEQ [T] < / Code> et SEQ [T, YOURCollectionType [T]]] .

Dans les futures versions de SCALA, les traits gen * peuvent être supprimés, cependant, rendant la hiérarchie plus simple.


0 commentaires

0
votes

Il y a un Nice Aperçu de la hiérarchie des classes de collecte sur Scala-lang.org.


1 commentaires

Ce sont de beaux diagrammes, mais je ne trouve pas abstractréseq , produit , generictraverableemplate , linéarseqoptimized , linéarseqlike < / Code>, SEQLILE , iterablelike , GenSeqLique ou parallelizable là-bas ...



6
votes

La plupart des parents sont effectivement des détails de mise en œuvre et des astuces d'optimisation. Si vous ne vous souciez pas de cela, vous pouvez ignorer quelque chose avec comme ou modèle à la fin. Appliquer cela aux listes, nous avons: Liste <: linéarseq <: SEQ <: itérable <: Traversable . Vous devez utiliser ces traits comme des types d'arguments dans votre code (plutôt que les traits de mise en œuvre). Ils sont décrits dans: Scala Collections API

Si vous souhaitez comprendre comment les traits de mise en œuvre sont utilisés ou concevez vos propres collections, vous devriez lire ce didacticiel: l'architecture des collections Scala .

En outre, si vous voulez / besoin de savoir où une méthode donnée est réellement mise en œuvre, cliquez sur la signature de méthode dans l'scaladoc pour développer de la description. Les classes les classes de définition affichent des liens vers l'emplacement de la mise en œuvre.


1 commentaires

J'ai découvert que j'ai appris un peu en expansinant sur la méthode et regardez les classes de définition . Par exemple, pour List.Isempty Il montrera SEQLILE → ITERABLELITINE → TRAVERBLITINIQUE → TRAVERSABLEONCE → GENDVERSAIRENCE . Je peux ensuite suivre SEQLILE et en savoir plus à ce sujet. Je peux ensuite cliquer sur SEQLILE.SCALA et vérifier le code source ...