0
Я не могу сделать эту работу:Пользовательская сортировка в Скале
abstract class AlternativeSortingType[T, B](implicit val ord: scala.math.Ordering[B]) {
def convert(t: T): B
}
case class LengthSortingType() extends AlternativeSortingType[String, Int] {
def convert(t: String): Int = t.length
}
class ProduceResult {
var c: AlternativeSortingType[String, _] = LengthSortingType()
def sort(l: List[String]) = l.sortBy(c.convert(_))(c.ord)
}
Он сетует следующий:
<console>:20: error: type mismatch;
found : scala.math.Ordering[_$1]
required: scala.math.Ordering[Any]
Note: _$1 <: Any, but trait Ordering is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
def sort(l: List[String]) = l.sortBy(c.convert(_))(c.ord)
^
я уже пытался поставить тип B только метод, но я не» Посмотрите, как избавиться от wilcard. Я хочу, чтобы иметь возможность сортировать, указав любой конвертер.
Как сделать тип совпадением?
Это будет работать '' 'класс ProduceResult { вал с = IntSortingType Защиту сортировки (л: Список [String]) = l.sortBy (c.convert (_)) (c.ord) } '' ' – mfirry
Да, но я хотел бы иметь c generic, чтобы впоследствии его заменить (думает о том, что метод сортировки по умолчанию и позволить пользователю реализовать его собственный) –