2010-03-28 4 views
13

Nel tentativo di scrivere un'API sto lottando con le raccolte di Scala in 2.8 (.0-beta1).Come si implementa una raccolta in Scala 2.8?

Fondamentalmente quello che serve è scrivere qualcosa che:

  • aggiunge funzionalità ai set immutabili di un certo tipo
  • in cui tutti i metodi come filtro e mappare restituire un insieme dello stesso tipo senza dover eseguire l'override tutto (che è il motivo per cui sono andato per 2.8 in primo luogo)
  • dove tutte le raccolte ottenute con questi metodi sono costruite con gli stessi parametri della collezione originale (simile a come SortedSet passa attraverso un ordinamento via impliciti)
  • che è ancora un tratto in sé, indipendentemente da eventuali implementazioni impostate.

Inoltre, desidero definire un'implementazione predefinita, ad esempio basata su un hashset. L'oggetto associato del tratto potrebbe utilizzare questa implementazione predefinita. Non sono ancora sicuro di aver bisogno della piena potenza delle fabbriche di costruttori per mappare il mio tipo di raccolta su altri tipi di raccolta.

Ho letto il paper on the redesign of the collections API ma sembra che le cose siano cambiate un po 'da allora e mi mancano alcuni dettagli. Ho anche analizzato il codice sorgente delle raccolte ma non sono sicuro che sia ancora coerente.

Idealmente, quello che mi piacerebbe vedere è un tutorial pratico che mi spiega passo passo i bit di cui ho bisogno o una descrizione estesa di tutti i dettagli, così posso giudicare da me quali bit ho bisogno . Mi è piaciuto il capitolo sull'uguaglianza degli oggetti in "Programming in Scala". :-)
Ma apprezzo qualsiasi suggerimento di documentazione o esempi che mi aiutino a capire meglio il nuovo design delle collezioni.

+2

http://lampwww.epfl.ch/~odersky/papers/fsttcs2009.pdf –

+0

Grazie, Lukas, leggerò anche quello. –

+3

Vedere anche http://daily-scala.blogspot.com/2010/04/creating-custom-traversable.html ("Creazione di implementazioni personalizzate percorribili", da Jesse Eichar e dal blog "Daily scala") – VonC

risposta

17

Vorrei dare un'occhiata all'implementazione di collection.immutable.BitSet. È un po 'diffuso, riutilizzando oggetti dalla collezione.BitSetLike e collection.generic.BitSetFactory. Ma fa esattamente quello che hai specificato: implementa un insieme immutabile di un certo tipo di elemento che aggiunge nuove funzionalità.

+0

Grazie per il puntatore , Martin, cercherò BitSet. Sembra più chiaro di SortedSet. Quello che in realtà voglio scrivere è qualcosa che si basa su insiemi ma è indipendente da qualsiasi implementazione di insiemi. Poi voglio un'altra classe che implementa effettivamente la mia caratteristica combinandola con un'implementazione impostata. Immagino che la scelta qui sia di mixin o forward. –