我正在努力提高我对Scala中更高级别类型的理解。当我回到基础时,我陷入了以下困境:
def fooList[A <: Int](x: List[A]): List[A] = x.map{ e => e + 1 }
Scala编译器不接受它,我不明白。 “A”必须是Int的子类。因此,在Int下传递的任何类型都应该有效。它为什么抱怨?有人可以在这里建议我吗?
中号
答案 0 :(得分:3)
A
确实必须是Int
,因为您无法创建Int
的子类,但编译器似乎并不是想要证明这一点。除此之外,自A <: Int
以来+
Int
方法返回Int
。
所以e + 1
是Int
而不是A
(即使A
必须是Int
,无论如何)。因此,x.map(e => e + 1)
会返回List[Int]
而不是List[A]
。要返回List[A]
,您需要使用A
方法的某个课程+
,该方法也会返回A
,而您不会这样做。