在 Scala 中,Int 是 List[Int] 的超类型吗?

问题描述

看一下这个例子:

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

我假设 AList[Int] 类型,A1Int 类型。 根据 foldofficial docsA1a type parameter for the binary operator,a supertype of A。如果我上面的假设是正确的,那么 Int 是上面 sum 示例中 List[Int] 的超类型。一些像 this one 这样的博文实际上明确说明了这一点。 显然,List[Int] 不扩展 Int。所以我的问题是:IntList[Int] 的超类型吗?

解决方法

A 是在 List[+A] 类型构造函数本身中绑定的类型变量:它位于您链接的文档页面的顶部,位于

sealed abstract class List[+A]

您的 list 变量属于 List[Int] 类型,因此 AIntA1 中的 fold 必须是 Int 的超类型,在这种情况下,AA1 >: A 因此都只是 Int(不是 { {1}})


关于博客的链接:它确实包含这句话

Int 是 List[Int] 的超类型

这显然是错误的。您可以按如下方式轻松检查:

List[Int]