Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中,Int是列表[Int]的超级类型吗?它是如何形成的?_Scala_Functional Programming_Fold - Fatal编程技术网

在Scala中,Int是列表[Int]的超级类型吗?它是如何形成的?

在Scala中,Int是列表[Int]的超级类型吗?它是如何形成的?,scala,functional-programming,fold,Scala,Functional Programming,Fold,看看这个例子: val list = List(1, 2, 3, 4, 5) val sum = list.fold(0)((x, y) => x + y) assert(sum == 15) 以及折叠的方法签名: fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1 我假设A是类型List[Int]和A1是类型Int。 根据forfold,A1是二进制运算符的类型参数,是a的超类型。如果我上面的假设是正确的,那么在上面的求和示例中,

看看这个例子:

val list = List(1, 2, 3, 4, 5) 
val sum = list.fold(0)((x, y) => x + y) 
assert(sum == 15)
以及
折叠的方法签名

fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1
我假设
A
是类型
List[Int]
A1
是类型
Int
。 根据for
fold
A1
是二进制运算符的类型参数,是a的超类型。如果我上面的假设是正确的,那么在上面的求和示例中,
Int
List[Int]
的超级类型。像这样的一些博客文章实际上明确地说明了这一点。
显然,
List[Int]
没有扩展
Int
。所以我的问题是:
Int
List[Int]
的超级类型吗?

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

sealed abstract class List[+A]
您的
list
-变量的类型是
list[Int]
,因此
A
Int
fold
中的
A1
必须是
Int
的超类型,在这种情况下,
a
A1>:a
因此只是
Int
(而不是
列表[Int]


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

Int是List[Int]的超类型

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

scala> implicitly[List[Int] <:< Int]
                 ^
       error: Cannot prove that List[Int] <:< Int.

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

sealed abstract class List[+A]
您的
list
-变量的类型是
list[Int]
,因此
A
Int
fold
中的
A1
必须是
Int
的超类型,在这种情况下,
A
A1>:因此A
只是
Int
(不是
list[Int]/code>)


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

Int是List[Int]的超类型

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

scala> implicitly[List[Int] <:< Int]
                 ^
       error: Cannot prove that List[Int] <:< Int.

scala>隐式[List[Int]你引用的博客是非常错误的,但是博客没有提到任何东西,甚至没有暗示像
Int是一个超级类型的List[Int]这样的错误声明
@sarveshseri只有这样做了,请检查最后第三段的最后一句。它只是说,
在所有三个折叠中,起始值的类型必须与返回值相同,这是一个正确的语句。这一点从签名本身就非常清楚了-对于任何
列表[a]
都有三个“折叠”方法-
fold[A1>:A](z:A1)(op:(A1,A1)=>A1:A1
foldLeft[B](z:B)(op:(B,A)=>B):B
,和
foldRight[B](z:B)(op:(A,B)=>B):B
。正如您所看到的,返回类型与收集器/起始值类型完全相同。我甚至没有看到任何迹象表明
Int是一种超级类型的列表[Int]
。好的。现在我看到了。它确实说,
Int是列表的超类型[Int]
…奇怪的是,当我上次读到它时,它逃过了我的注意。你引用的那个博客是非常错误的,但是博客没有提到任何东西,甚至没有暗示像
Int是列表的超类型[Int]这样的非常错误的声明
@sarveshseri只有这样做了,请检查最后第三段的最后一句。它只是说,
在所有三个折叠中,起始值的类型必须与返回值相同,这是一个正确的语句。这一点从签名本身就非常清楚了-对于任何
列表[a]
都有三个“折叠”方法-
fold[A1>:A](z:A1)(op:(A1,A1)=>A1:A1
foldLeft[B](z:B)(op:(B,A)=>B):B
,和
foldRight[B](z:B)(op:(A,B)=>B):B
。正如您所看到的,返回类型与收集器/起始值类型完全相同。我甚至没有看到任何迹象表明
Int是一种超级类型的列表[Int]
。好的。现在我看到了。它确实说,
Int是列表[Int]
的超类型……奇怪的是,当我上次读它的时候,它逃过了我的眼睛。