Scala 模式匹配列表上未定义隐式排序
在Scala 2.11.8上:Scala 模式匹配列表上未定义隐式排序,scala,Scala,在Scala 2.11.8上: private def safeMax[A](xs: List[A]) (implicit ev: Ordering[A]): Option[A] = xs match { case ys@(_ :: _) => Some(ys.min) case Nil => None } // Exiting paste mode, now interpreting. <
private def safeMax[A](xs: List[A])
(implicit ev: Ordering[A]): Option[A] = xs match {
case ys@(_ :: _) => Some(ys.min)
case Nil => None
}
// Exiting paste mode, now interpreting.
<console>:12: error: No implicit Ordering defined for ?A1.
case ys@(_ :: _) => Some(ys.min)
^
private def safeMax[A](xs:List[A])
(隐式ev:Ordering[A]):选项[A]=xs匹配{
案例ys@(::)=>Some(ys.min)
案例Nil=>无
}
//正在退出粘贴模式,现在正在解释。
:12:错误:没有为?A1定义隐式排序。
案例ys@(::)=>Some(ys.min)
^
既然ys
的类型是List[A]
,那么为什么会出现这种编译时错误呢
请注意,我可以用
xs.min
替换ys.min
来修复它,但我仍然很好奇。如果您编写ys.min(ev)
,(ys:List[A]).min
,或者case Nil=>None,它也可以工作;案例ys=>Some(ys.min)
。在我看来,这似乎是一个推理错误,但我永远也说不出来。可能值得报道。推断出什么是ys
呢?我在JIRA罚单上添加了一些(非决定性的)评论。小结:在我看来,这似乎是模式匹配程序中的一个bug,特别是因为代码在Scala 2.9中工作。如果您编写ys.min(ev)
,(ys:List[a])。min
,或case Nil=>None,它也可以工作;案例ys=>Some(ys.min)
。在我看来,这似乎是一个推理错误,但我永远也说不出来。可能值得报道。推断出什么是ys
呢?我在JIRA罚单上添加了一些(非决定性的)评论。小结:对我来说,这似乎是模式匹配器中的一个bug,尤其是因为代码在Scala 2.9中工作。