Не определено неявное упорядочение для T с Int (Scala) - PullRequest
0 голосов
/ 27 февраля 2012

Мой класс является универсальным и определяет iv как MHashMap[DateTime, T].MHashMap - это псевдоним для scala.collection.mutableHashMap.Затем я использую этот код для предоставления минимальной функциональности поиска

def minimum: BigDecimal = {
  iv match {
    case dtMcM: MHashMap[DateTime, MyCustomClass] => dtMcM.minBy(_._2.bdField)._2.bdField
    case dtBdM: MHashMap[DateTime, BigDecimal] => dtBdM.minBy(_._2)._2
    case dtDlM: MHashMap[DateTime, Double] => dtDlM.minBy(_._2)._2.toBigDecimal
    case dtItM: MHashMap[DateTime, Int] => dtItM.minBy(_._2)._2
    case _ => throw new IllegalArgumentException("Unsupported underlying type")
  }
}

Но компилятор жалуется:

No implicit Ordering defined for T with Int.
case dtItM: MHashMap[DateTime, Int] => dtItM.minBy(_._2)._2

И то же самое для случаев Double и BigDecimal.

Почему компилятор не может даже распознать Int, чтобы применить порядок по умолчанию?Любопытно, что у него, похоже, нет проблем с полем BigDecimal моего собственного пользовательского класса.

1 Ответ

2 голосов
/ 27 февраля 2012

Ну, Int <: T with Int. Теперь, если вы собираетесь использовать Ordering[Int] для этого, тогда вам нужно Ordering[T with Int] <: Ordering[Int], что означает, что Ordering должно быть контравариантным. К сожалению, Ordering не является контравариантным (хотя он мог бы - и это в Скалазе).

...