9

せっかちな人のために Scalaから次のスニペットを実行しようとしているとき:

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

次のエラーが表示されます。

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

誰かがここで何が起こっているのか説明できますか. パラメータの型を ArrayBuffer の内容から推測すべきではないですか、それとも明示的に指定する必要がありますか?

ありがとう

4

1 に答える 1

16

.sortedtype の暗黙的なパラメーターを取りますOrdering(Java と同様Comparator)。整数の場合、コンパイラは正しいインスタンスを提供します。

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

比較関数を渡したい場合は、次を使用します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)

ただし、ArrayBuffer変更可能ですが、両方の並べ替えメソッドは並べ替えられたコピーを返しますが、元は変更されないことに注意してください。

于 2012-04-12T14:13:07.543 に答える