尝试从
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的内容推断参数类型,还是需要明确指定?
谢谢
解决方法
.sorted采用Ordering类型的隐式参数(类似于Java Comparator).对于整数,编译器将为您提供正确的实例:
scala> b.sorted res0: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1,9)
如果要传递比较功能,请使用sortWith:
scala> b.sortWith( _ < _ ) res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1,9) scala> b.sortWith( _ > _ ) res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(9,1)