问题描述
sealed trait Natural
sealed trait Vect[N <: Natural,+A]:
def length: Int
def map[B](f: A => B): Vect[N,B]
def zip[B](that: Vect[N,B]): Vect[N,(A,B)]
def concat[M <: Natural,B >: A](that: Vect[M,B]): Vect[Plus[N,M],B]
Vect[N,B)]
是什么意思,尤其是 (A,B)
?
解决方法
A Vect
是具有 2 个类型参数的类型。第一个必须是某种形式的(子类型)Natural
,我们称之为N
。第二个是在调用站点定义的一些不受限制的类型,我们将其称为 A
。
zip()
方法接收不同的 Vect
。它必须具有相同的第一个参数类型(不仅仅是任何 Natural
,它必须相同)但第二个参数类型可能不同,我们将其称为 B
。 (它可能与 A
相同,但可能不同,因此需要不同的标识符。)
zip()
方法返回一个新的 Vect
,具有相同的第一个参数类型,但第二个类型参数是一个 2 元素元组(一个 2-ple),第一个元素类型为 {{ 1}} 和 A
类型的第二个元素。
B
和 A
已被“压缩”在一起。
(A,B)
是元组的类型。
scala api 有 zip 的定义,类似。