下面,所述第一壳体成功并且第二失败。为什么我需要明确的证据类型/为什么这个Scala类型绑定失败?在解决A
问题时,类型推理器的特殊限制是什么?为什么我需要明确的证据类型/为什么这个Scala类型绑定失败?
scala> implicit def view[A, C](xs: C)(implicit ev: C <:< Iterable[A]) = new { def bar = 0 }
view: [A, C](xs: C)(implicit ev: <:<[C,scala.collection.immutable.Iterable[A]])java.lang.Object{def bar: Int}
scala> view(List(1)) bar
res37: Int = 0
scala> implicit def view[A, C <: Seq[A]](xs: C) = new { def bar = 0 }
view: [A, C <: scala.collection.immutable.Seq[A]](xs: C)java.lang.Object{def bar: Int}
scala> view(List(1)) bar
<console>:149: error: inferred type arguments [Nothing,List[Int]] do not conform to method view's type parameter bounds [A,C <: scala.collection.immutable.Seq[A]]
view(List(1)) bar
^
谢谢,但我其实知道'C [A] <:序号[A]'工作 - 它只是限制了我一元型构造。我*想*一个'C <:Seq [A]'。无论如何,你说的推理不符合类型参数引用对方处理好回答我的问题,所以我将其标记为接受,但会爱更多详情! – Yang