繁体   English   中英

没有使用Int(Scala)为T定义隐式排序

[英]No implicit Ordering defined for T with Int (Scala)

我的一类是通用的,并将iv定义为MHashMap[DateTime, T] MHashMapscala.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

对于DoubleBigDecimal案例也是如此。

如何编译器甚至无法识别Int以应用默认排序? 奇怪的是,我自己的自定义类的BigDecimal字段似乎没有任何问题。

好吧, Int <: T with Int 现在,如果您打算使用Ordering[Int] ,那么您需要Ordering[T with Int] <: Ordering[Int] ,这意味着Ordering必须是逆变的。 不幸的是, Ordering不是逆变的(即使它可以 - 而且它在Scalaz中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM