2012-04-12 10 views
9

Beim Versuch, den folgenden Ausschnitt aus Scala for the impatient auszuführen:Fehlende Parametertyp für eine erweiterte Funktion in Scala Arraybuffer

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

ich die folgende Fehlermeldung erhalten:

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

Kann jemand erklären, was im Gange sein könnte Hier. Soll der Parametertyp nicht aus dem Inhalt des ArrayBuffers abgeleitet werden oder muss er explizit angegeben werden?

Dank

Antwort

15

.sorted nimmt einen impliziten Parameter des Typs Ordering (ähnlich wie Java Comparator). Für ganze Zahlen sind, liefert der Compiler die richtige Instanz für Sie:

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

Wenn Sie eine Vergleichsfunktion übergeben möchten, verwenden Sie 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) 

jedoch zu achten, obwohl ArrayBuffer wandelbar ist, sowohl Sortiermethoden geben eine Kopie zurück, die sortiert ist, aber das Original wird nicht berührt.

+0

Danke. Macht Sinn. –

+0

Also bedeutet das, dass das Buch einen Fehler hat? Oder hat die Sortierung irgendwann eine Vergleichsfunktion übernommen? –

+0

Ich denke, es ist ein Fehler in dem Buch. Vielleicht eine andere Scala-Version? – paradigmatic

Verwandte Themen