繁体   English   中英

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

[英]Missing parameter type for expanded function in Scala ArrayBuffer

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

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是可变的,但两种排序方法都会返回一个已排序的副本,但原始文件不会被触及。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM