scala通用双括号文字

scala generic double brackets literal

我正在学习Scala的通用内容,不知道代码中的literal是什么意思

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, (A, B)] 是什么意思,尤其是 (A, B)

(A,B) 是元组的类型。

scala api 有 zip 的定义,类似。

参考:https://docs.scala-lang.org/tour/tuples.html

A Vect 是一个有 2 个类型参数的类型。第一个必须是 Natural 的某种形式(子类型),我们称它为 N。第二个是在调用点定义的一些不受限制的类型,我们称之为 A.

zip() 方法接收不同的 Vect。它必须具有相同的第一个参数类型(不只是任何 Natural,它必须相同)但第二个参数类型可能不同,我们将其称为 B。 (它可能与 A 相同,但可能不同,因此它需要不同的标识符。)

zip() 方法 returns 新的 Vect 具有相同的第一个参数类型,但第二个类型参数是一个 2 元素元组(2-ple) A 类型的第一个元素和 B.

类型的第二个元素

AB 已“压缩”在一起。