Scala 隐式<;,如何:&书信电报;帮助查找类型参数

Scala 隐式<;,如何:&书信电报;帮助查找类型参数,scala,implicit,Scala,Implicit,在阅读7.3.2捕获类型约束时,出现了几个问题 从约书亚的斯卡拉深入。本书摘录的示例如下: scala> def peek[C, A](col: C)(implicit ev: C <:< Traversable[A]) = (col.head, col) peek: [C, A](col: C)(implicit ev: <:<[C,Traversable[A]])(A, C) scala> peek(List(1, 2, 3)) res9: (Int,

在阅读7.3.2捕获类型约束时,出现了几个问题 从约书亚的斯卡拉深入。本书摘录的示例如下:

scala> def peek[C, A](col: C)(implicit ev: C <:< Traversable[A]) = (col.head, col)
peek: [C, A](col: C)(implicit ev: <:<[C,Traversable[A]])(A, C)

scala> peek(List(1, 2, 3))
res9: (Int, List[Int]) = (1,List(1, 2, 3))
scala>def peek[C,A](col:C)(implicit ev:CAs,您只需要一点限定就可以了。您说编译器“拉”
符合[Traversable[A]]
,但这里真的不需要任何这样的实例。举一个非常清楚implicit在范围内的简化示例:

trait Foo[-From, +To]

implicit object intListFoo extends Foo[List[Int], List[Int]]
现在肯定没有
Foo[Traversable[Int],Traversable[Int]]
了,但我们可以编写以下代码:

scala> implicitly[Foo[List[Int], Traversable[Int]]]
res0: Foo[List[Int],Traversable[Int]] = intListFoo$@8e760f2

在您的示例中发生了或多或少完全相同的事情。在这种情况下,我们将有一个实例
Traversable[Int]是的,它按照您的描述工作。@pedrofurla谢谢you@pedrofurla您可能希望将其作为答案提交:)