如何让scala更高级的类型工作

时间:2015-03-11 18:42:56

标签: scala higher-kinded-types

我正在努力提高我对Scala中更高级别类型的理解。当我回到基础时,我陷入了以下困境:

 def fooList[A <: Int](x: List[A]): List[A] = x.map{ e => e + 1 }

Scala编译器不接受它,我不明白。 “A”必须是Int的子类。因此,在Int下传递的任何类型都应该有效。它为什么抱怨?有人可以在这里建议我吗?

中号

1 个答案:

答案 0 :(得分:3)

在这种情况下,

A确实必须是Int,因为您无法创建Int的子类,但编译器似乎并不是想要证明这一点。除此之外,自A <: Int以来+ Int方法返回Int

所以e + 1Int而不是A(即使A必须是Int,无论如何)。因此,x.map(e => e + 1)会返回List[Int]而不是List[A]。要返回List[A],您需要使用A方法的某个课程+,该方法也会返回A,而您不会这样做。