Mientras escribía algunos códigos Scala, recibí un extraño mensaje de error cuando intentaba compilar el código. Desglose el código a uno mucho más simple (que no tiene ningún sentido desde el punto de vista semántico, pero aún muestra el error).Extraño error al compilar un bucle for
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scala.collection.mutable.ListBuffer
val map = scala.collection.mutable.Map[Int, ListBuffer[Int]]()
for (i <- 1 to 2) {
map.get(0) match {
case None => map += (1 -> ListBuffer[Int](1))
case Some(l: ListBuffer[Int]) => l += i
}
}
// Exiting paste mode, now interpreting.
<console>:12: error: type arguments [Any] do not conform to trait Cloneable's t
pe parameter bounds [+A <: AnyRef]
for (i <- 1 to 2) {
^
Al agregar una línea adicional al final del bucle, el código funciona:
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scala.collection.mutable.ListBuffer
val map = scala.collection.mutable.Map[Int, ListBuffer[Int]]()
for (i <- 1 to 2) {
map.get(0) match {
case None => map += (1 -> ListBuffer[Int](1))
case Some(l: ListBuffer[Int]) => l += i
}
1 // <- With this line it works
}
// Exiting paste mode, now interpreting.
warning: there were 1 unchecked warnings; re-run with -unchecked for details
import scala.collection.mutable.ListBuffer
map: scala.collection.mutable.Map[Int,scala.collection.mutable.ListBuffer[Int]]
= Map(1 -> ListBuffer(1))
supongo, que tiene algo que ver con el valor de retorno del partido-sentencia-case . Pero no soy lo suficientemente experto en Scala para descubrir la razón detrás de este mensaje de error y lo que estoy haciendo mal. Espero que alguien más sabio pueda ayudar aquí.
¿Cuál es la razón detrás del mensaje de error? ¿Qué está mal con el enunciado de la caja de fósforos?
ACTUALIZACIÓN: Probado con Scala 2.9.2
Esto es probablemente un error. Con 2.10 funciona bien. – sschaef