2012-07-12 4 views
17

Qualcuno potrebbe aiutarmi a capire i vari tratti "Mi piace" di Scala nell'API di raccolta. Ho letto e provato a confrontarli senza fortuna. Penso di poter vedere che Map, ad esempio, estende MapLike, aggiungendo 2 metodi concreti. Ma questo solleva la domanda sul perché fare questo? Perché non avere solo 1 tratto di mappa nell'API di raccolta invece di Map e MapLike?Scala MapLike, ListLike, SeqLike, ecc. In che modo ciascuno confronta con Mappa, Elenco, Seq?

Grazie!

+0

possibile duplicato di [Tutorial di design di Scala 2.8 collections] (http://stackoverflow.com/questions/1722137/scala-2-8-collections-design-tutorial) –

+0

In realtà non è un duplicato ... questa domanda è sussunta da quello. –

risposta

14

La fonte migliore per questi dettagli è Martin Odersky and Lex Spoon's "What's New in Scala 2.8: The Architecture of Scala Collections":

La biblioteca collezione Scala evita la duplicazione del codice e raggiunge il principio "dello stesso risultato di tipo" utilizzando costruttori generici e attraversamenti su collezioni in cd chiamati tratti di implementazione. Questi tratti sono denominati con un suffisso Like; per esempio, è il tratto IndexedSeqLike implementazione per IndexedSeq, e similmente, TraversableLike è il tratto di attuazione Traversable. Classi di raccolta come Traversable o IndexedSeq ereditano tutte le implementazioni del metodo concreto da questi tratti. I tratti di implementazione hanno due parametri di tipo anziché uno per le raccolte normali . Essi parametrizzare non solo sul tipo elemento della collezione, ma anche sopra della collezione tipo rappresentazione, cioè, il tipo di raccolta sottostante, come Seq[I] o List[T] ...

L'intero articolo è estremamente utile se si desidera integrare le proprie classi di raccolta con l'API Collections o se si desidera solo una comprensione più approfondita del funzionamento della libreria.

+1

Devo dire, dalla sola lettura di questo estratto, non sono molto più saggio (ho la stessa domanda di @LalolnDublin) :(Vedo che ci sono implementazioni di alcuni tratti più generali, ma non riesco davvero a sembrare dove sarebbe utile –

+0

@Karel: prova l'articolo! Ne vale la pena. Una spiegazione completa sarebbe troppo lunga per essere copiata qui, e non ho visto alcun punto di parafrasare quando la fonte originale è così facilmente disponibile e già molto chiara –

+0

Grazie, dopo aver letto l'articolo un paio di volte ho ancora problemi ad afferrare il concetto (essere nuovo a scala non aiuta) ma un elemento chiave sembra essere il concetto di "TraversableLike" (con 2 parametri di tipo) consente a qualcuno di utilizzare l'interfaccia Traverable senza limitarsi a una rappresentazione di tipo uniforme di entrambi gli elementi e la rappresentazione dei dati. Non lo capisco completamente senza altri esempi, ma mi sento come se fossi un passo avanti! – LaloInDublin

Problemi correlati