在Scala ArrayBuffer中缺少扩展函数的参数类型

sc_*_*ray 9 sorting parameters types scala

尝试从Scala运行以下代码片段时不耐烦:

val b = ArrayBuffer(1,7,2,9)
val bSorted = b.sorted(_ < _)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

有人可以解释这里可能会发生什么.不应该从ArrayBuffer的内容中推断出参数类型,还是需要明确指定它?

谢谢

par*_*tic 16

.sorted采用类型的隐式参数Ordering(类似于Java Comparator).对于整数,编译器将为您提供正确的实例:

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

如果要传递比较函数,请使用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)
Run Code Online (Sandbox Code Playgroud)

但是,要注意,虽然ArrayBuffer是可变的,但两种排序方法都会返回一个已排序的副本,但原始文件不会被触及.

  • @sc_ray这是一个错误,它在[勘误表](http://horstmann.com/scala/bugs.html)中列出. (3认同)