scala - Scala ArrayBuffer中缺少扩展功能的参数类型

标签 scala sorting types parameters

尝试从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, 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是可变的,但是这两种sort方法都将返回已排序的副本,但不会触及原始副本。

关于scala - Scala ArrayBuffer中缺少扩展功能的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10125183/

相关文章:

scala - 带有 akka-cluster 的 akka-streams

scala - 使用 Play2 scala 的 Heroku 内存泄漏

jquery - 如何简单地按数据表的最后一列排序

java - 使用选择排序按字母顺序对数组进行排序

ios - 如何按用户对 PFObjects 进行分组,然后对它们进行排序?

c++ - 函数模板参数的类型推导

types - 强类型枚举作为 rust 中的联合 : How to determine type of value and retrieve it; How to do "constructors"

scala - 电梯入门

java - Scala的存在类型和Java通配符的区别?

Java如何从来自多个来源的数据推断类型