2010-03-28 50 views
13

Al tratar de escribir una API Estoy luchando con colecciones de Scala de 2,8 (0,0-beta1).¿Cómo implemento una colección en Scala 2.8?

Básicamente lo que necesito es escribir algo que:

  • añade funcionalidad a los conjuntos inmutables de un cierto tipo
  • donde todos los métodos como filtro y mapa devolver una colección del mismo tipo, sin tener que reemplazar todo (por eso opté por 2.8 en primer lugar)
  • donde todas las colecciones que obtienes mediante esos métodos están construidas con los mismos parámetros que la colección original (similar a cómo SortedSet entrega un pedido mediante implicits)
  • que sigue siendo un rasgo en sí mismo, independiente de cualquier implementación establecida.

Además, quiero definir una implementación predeterminada, por ejemplo, basada en un HashSet. El objeto complementario del rasgo puede usar esta implementación predeterminada. Todavía no estoy seguro de si necesito toda la potencia de las fábricas de constructores para asignar mi tipo de colección a otros tipos de colecciones.

leí el paper on the redesign of the collections API pero parece que las cosas han cambiado un poco desde entonces y me faltan algunos detalles en allí. También exploré el código fuente de las colecciones, pero aún no estoy seguro de que sea muy consistente.

Idealmente, lo que me gustaría ver es un tutorial práctico que me diga paso a paso solo los bits que necesito o una descripción extensa de todos los detalles para poder juzgarme a mí mismo qué bits necesito . Me gustó el capítulo sobre igualdad de objetos en "Programación en Scala". :-)
Pero aprecio cualquier punteros a documentación o ejemplos que ayudan a entender el nuevo diseño de las colecciones mejor.

+2

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

+0

Gracias, Lukas, que va a leer eso también. –

+3

Véase también http://daily-scala.blogspot.com/2010/04/creating-custom-traversable.html ("Creación de implementaciones personalizadas atravesables", de Jesse Eichar y el blog "Scala Daily") – VonC

Respuesta

17

me gustaría echar un vistazo a la implementación de collection.immutable.BitSet. Está un poco extendido, reutilizando cosas de collection.BitSetLike y collection.generic.BitSetFactory. Pero hace exactamente lo que usted especificó: implementar un conjunto inmutable de un determinado tipo de elemento que agrega nuevas funcionalidades.

+0

Gracias por el puntero , Martin, examinaré BitSet. Parece más claro que SortedSet. Lo que realmente quiero escribir es algo que se construye sobre los conjuntos pero es independiente de cualquier implementación de conjuntos. Luego quiero otra clase que realmente implemente mi rasgo combinándolo con una implementación establecida. Creo que la elección aquí es mezclar o reenviar. –

Cuestiones relacionadas