Scala 带排序的参数化方法?
现在我很困惑。我是Scala的新手,已经使用它几个星期了,我想我对它已经很熟悉了,但是我仍然停留在下面这个看似微不足道的例子上 我找不到与此Java声明等效的Scala:Scala 带排序的参数化方法?,scala,variance,type-parameter,Scala,Variance,Type Parameter,现在我很困惑。我是Scala的新手,已经使用它几个星期了,我想我对它已经很熟悉了,但是我仍然停留在下面这个看似微不足道的例子上 我找不到与此Java声明等效的Scala: public static <T extends Comparable<T>> List<T> myMethod(List<T> values) { // ... final List<T> sorted = new ArrayList<T>(va
public static <T extends Comparable<T>> List<T> myMethod(List<T> values) {
// ...
final List<T> sorted = new ArrayList<T>(values);
Collections.sort(sorted);
// ...
}
但是,我得到以下错误:
错误:涉及类型A的非法循环引用
错误:scala.math.Ordering[A]类型的发散隐式展开
从对象排序中的方法Tuple9开始
我哪里错了?这应该是一个上下文绑定,如下所示
scala> def myMethod[A : Ordering](values: Seq[A]): Seq[A] = values.sorted
myMethod: [A](values: Seq[A])(implicit evidence$1: Ordering[A])Seq[A]
首先,
排序
类似于比较器
,而不是可比
。相当于可比
的Scala是有序的
。接下来,扩展
等价物是:
。后者相当于super
--T super compariable
,这不是您想要的。因此,使用这两个修复程序,您的代码应该如下所示:
def myMethod[A <: Ordered[A]](values: Seq[A]): Seq[A] = {
// ...
val sorted = values.sorted
//
}
def myMethod[A <% Ordered[A]](values: Seq[A]): Seq[A] = {
// ...
val sorted = values.sorted
//
}
请参见它应该是一个
def myMethod[A <% Ordered[A]](values: Seq[A]): Seq[A] = {
// ...
val sorted = values.sorted
//
}