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

现在我很困惑。我是Scala的新手,已经使用它几个星期了,我想我对它已经很熟悉了,但是我仍然停留在下面这个看似微不足道的例子上

我找不到与此Java声明等效的Scala:

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
  //
}