尝试从Scala for the impatient运行以下代码段时:
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的内容中推断出参数类型,还是需要明确指定它?
由于
答案 0 :(得分:15)
.sorted
采用类型为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
是可变的,但两种排序方法都会返回一个已排序的副本,但原始文件不会被触及。