Scala 模式匹配列表上未定义隐式排序

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. <

在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.

<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中工作。