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

尝试从 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)

但是,请注意,尽管ArrayBuffer是可变的,但是两种排序方法都将返回一个被排序的副本,但是原始的不会被触摸.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...