问题描述
看一下这个例子:
val list = List(1,2,3,4,5)
val sum = list.fold(0)((x,y) => x + y)
assert(sum == 15)
还有fold
的方法签名:
fold[A1 >: A](z: A1)(op: (A1,A1) => A1): A1
我假设 A
是 List[Int]
类型,A1
是 Int
类型。
根据 fold
的 official docs,A1
是 a type parameter for the binary operator,a supertype of A
。如果我上面的假设是正确的,那么 Int
是上面 sum 示例中 List[Int]
的超类型。一些像 this one 这样的博文实际上明确说明了这一点。
显然,List[Int]
不扩展 Int
。所以我的问题是:Int
是 List[Int]
的超类型吗?
解决方法
A
是在 List[+A]
类型构造函数本身中绑定的类型变量:它位于您链接的文档页面的顶部,位于
sealed abstract class List[+A]
您的 list
变量属于 List[Int]
类型,因此 A
是 Int
。 A1
中的 fold
必须是 Int
的超类型,在这种情况下,A
和 A1 >: A
因此都只是 Int
(不是 { {1}})
关于博客的链接:它确实包含这句话
Int 是 List[Int] 的超类型
这显然是错误的。您可以按如下方式轻松检查:
List[Int]