请考虑以下代码。
def create[A: Ordering]: Unit = ()
case class Test[A: Ordering](x: Unit = create[A])
编译器投诉,因为在第二行中,他找不到调用create
所需的隐式参数:
ScalaFiddle.scala:5:错误:没有为A. case定义隐式排序 class Test [A:Ordering](x:Unit = create [A])
为什么会发生这种情况,因为应该有一个Ordering[A]
?
我该如何解决这个问题?
答案 0 :(得分:2)
这是由编译器会尝试翻译:
引起的case class Test[A: Ordering](x: Unit = create[A])
为:
case class Test[A](x: Unit = create[A])(implicit ordering: Ordering[A])
如您所见,编译器无法找到默认 implicit Ordering
的{{1}}参数,下面是一个证明这一点的简单示例:
create[A]
对于解决方案,也许你可以使用scala> def foo[A: Ordering](): Unit = ()
foo: [A]()(implicit evidence$1: Ordering[A])Unit
scala> def bar[A: Ordering](x: Unit = foo[A]): Unit = ()
<console>:12: error: No implicit Ordering defined for A.
def bar[A: Ordering](x: Unit = foo[A]): Unit = ()
scala> def bar[A: Ordering](x: Unit = foo[Double]): Unit = ()
bar: [A](x: Unit)(implicit evidence$1: Ordering[A])Unit
绑定class
,也许就像:
Ordering