Scala 2.8 CanBuildFrom
Siguiendo con otra pregunta que hice,Scala 2.8 ruptura, Quería entender un poco más sobre el método ScalaTraversableLike[A].map
cuya firma es la siguiente:
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
Note algunas cosas sobre este método:
Se necesita una función girando cadaA
en lo transitable en unaB
.VuelveThat
y toma un argumento implícito de tipoCanBuildFrom[Repr, B, That]
.Puedo llamar a esto de la siguiente manera:
> val s: Set[Int] = List("Paris", "London").map(_.length)
s: Set[Int] Set(5,6)
QuéNo puedo entender es como el hecho de queThat
esUnido aB
(es decir, es una colección de B) que está siendo aplicada por el compilador. Los parámetros de tipo parecen ser independientes tanto de la firma anterior como de la firma del rasgoCanBuildFrom
sí mismo:
trait CanBuildFrom[-From, -Elem, +To]
¿Cómo se asegura el compilador de Scala queThat
no puede serforzado en algo que no tiene sentido?
> val s: Set[String] = List("Paris", "London").map(_.length) //will not compile
¿Cómo decide el compilador lo implícito?CanBuildFrom
¿Los objetos están en el alcance de la convocatoria?