2012-04-12 8 views
9

al intentar ejecutar el siguiente fragmento de Scala for the impatient:Missing tipo de parámetro para la función ampliada en Scala ArrayBuffer

val b = ArrayBuffer(1,7,2,9) 
val bSorted = b.sorted(_ < _) 

me sale el siguiente error:

error: missing parameter type for expanded function ((x$1, x$2) => x$1.$less(x$2)) 
     val bSorted = b.sorted(_ < _) 

Puede alguien explicar lo que podría estar pasando aquí. ¿No debería inferirse el tipo de parámetro del contenido de ArrayBuffer o debo especificarlo explícitamente?

Gracias

Respuesta

15

.sorted toma un parámetro implícito de tipo Ordering (similar a Java Comparator). Para enteros, el compilador proporcionará la instancia correcta para usted:

scala> b.sorted 
res0: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7, 9) 

Si desea pasar una función de comparación, utilice sortWith:

scala> b.sortWith(_ < _) 
res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7, 9) 

scala> b.sortWith(_ > _) 
res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(9, 7, 2, 1) 

Sin embargo, prestar atención, a pesar de ArrayBuffer es mutable, tanto los métodos de clasificación devolverán una copia que está ordenada, pero no se tocará el original.

+0

Gracias. Tiene sentido. –

+0

¿Significa esto que el libro tiene un error? ¿O clasificó una función de comparación en algún momento? –

+0

Creo que es un error en el libro. Tal vez una versión diferente de Scala? – paradigmatic

Cuestiones relacionadas