作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读7.3.2捕获类型约束时会出现几个问题
来自Joshua's Scala in Depth。本书摘录的示例:
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))
C
是
List[Int]
似乎很简单
<:<
如何通过方差强制类型约束。
A
。
C: List[Int]
,
implicit ev: <:<[List[Int], Traversable[A]]
。
A
仍然未知。
conforms[List[Int]]
和
conforms[Traversable[A]]
到
ev
。在任一情况下,为了满足方差,必须满足
List[Int] <: Traversable[A]
,这导致发现
A
是
Int
。
A
。
最佳答案
作为pedrofurla commented,只要一点点限定,您就对了。您说编译器“拉”了conforms[Traversable[A]]
,但实际上这里不需要任何此类实例。举一个简化的例子,其中很清楚范围内的隐式内容:
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] <:< Traversable[Int]
,但我们不针对该特定的隐式搜索。
关于scala - 隐式<:<如何帮助查找类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15998272/
我是一名优秀的程序员,十分优秀!