Estoy tratando de definir una interfaz de colección personalizada en Scala 2.8. Quiero exigir que las subclases sean Traversables, más algún otro comportamiento. También quiero métodos como el mapa() para devolver el tipo apropiado, de la siguiente manera:¿Cómo puedo definir una interfaz de colección personalizada en Scala sin definir una implementación?
trait CustomCollection[+A] extends Traversable[A] {
def customOperation(i:Int):Int // for example
}
def incrementAll(c:CustomCollection[Int]):CustomCollection[Int] = c.map { _ + 1 }
Esto no compila, porque CustomCollection.map() devuelve una de Traversable. Supongo que necesito definir un CanBuildFrom, pero luego necesito definir un método apply() que construya una instancia desde cero. No quiero especificar una forma de construir esto; eso debería estar a cargo del implementador. es posible?
Gracias, axel22. Si entiendo su respuesta, debo proporcionar una implementación predeterminada de CustomCollection, que será utilizada por el método newBuilder de mi compañero. Esperaba evitar especificar una implementación predeterminada. ¿Podría explicarme por qué lo necesito? No parece que deba ser necesario para un método como map(), porque no puede llamar a map() a menos que ya tenga alguna implementación. – traversable
Técnicamente, podría evitar proporcionar una implementación de constructor predeterminada en el acompañante 'CustomCollection', pero ¿cómo implementar el método' apply() 'sin parámetros en' CanBuildFrom'? Puede permitir que 'newBuilder' en el compañero' CustomCollection' arroje una excepción de operación no admitida, evitando así una implementación predeterminada.Creo que todo funcionaría, excepto el método 'breakOut' en colecciones, que requiere el parámetro' apply() '.. – axel22
Ah ... así que la razón por la que necesito una implementación predeterminada es hacer que breakOut funcione. ¡Gracias! – traversable