Вы получаете ошибку компиляции, потому что вы пытаетесь использовать Comparable, когда компилятор ожидает A, что вы действительно хотите сделать:
val min: A = new A {
def compareTo(other: A) = -1
}
, новы не можете сделать это в Scala (или Java), потому что вы пытаетесь создать объект неизвестного типа (A).Вы могли бы сделать это с помощью отражения, но у вас все равно была бы проблема создания объекта, который был бы меньше, чем любой другой объект в списке.
Кроме того, помните, что ваша реализация CompareToбудут проблемы с почти любым алгоритмом сортировки, который вы выберете, потому что вы не можете гарантировать, что CompareTo всегда вызывается из min.Например, вы можете получить:
min.compareTo(list(0)) // returns -1
list(0).compareTo(min) // could be anything really
Если вам нужен список, который возвращает определенный объект как «минимум», то вы можете просто добавить определенное значение в отсортированный список:
class MyList2[A <: Comparable[A]] {
val min: A; // somehow create an instance of the class A
val list: List[A]
def sort(fn: (A, A) => Boolean) = {
min :: list.sort(fn)
}
}
но, как говорит Даниил, это, вероятно, неправильный путь.