Parameterized method with ordering?

Now I am confused. I am completely new to Scala, working with him for several weeks, I think I will get to know him, but I am stuck in an obvious trivial case.

I cannot find the Scala equivalent for this Java declaration:

public static <T extends Comparable<T>> List<T> myMethod(List<T> values) {
  // ...
  final List<T> sorted = new ArrayList<T>(values);
  Collections.sort(sorted);
  // ...
}

I thought the following:

def myMethod[A >: Ordering[A]](values: Seq[A]): Seq[A] = {
  // ...
  val sorted = values.sorted
  //
}

However, I get the following errors:

error: illegal circular reference including type A

error: diverging implicit extension for type scala.math.Ordering [A] starting with the Tuple9 method in the Order object

Where am I mistaken?

+3
source share
2 answers

This should be context related as shown below.

scala> def myMethod[A : Ordering](values: Seq[A]): Seq[A] = values.sorted
myMethod: [A](values: Seq[A])(implicit evidence$1: Ordering[A])Seq[A]
+5
source

, Ordering Comparator, Comparable. Scala Comparable Ordered. extends <:, >:. super - T super COmparable<T>, . , :

def myMethod[A <: Ordered[A]](values: Seq[A]): Seq[A] = {
  // ...
  val sorted = values.sorted
  //
}

Seq[Int], , Int Ordered - , Java Int Comparable ( - , ).

Scala - Ordered. , :

def myMethod[A <% Ordered[A]](values: Seq[A]): Seq[A] = {
  // ...
  val sorted = values.sorted
  //
}

<% <:? .

Scala , . Ordering, .

+7

All Articles