scala 通用双括号文字

问题描述

我在学习Scala的泛型内容,不知道代码中的字面意思

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 类型的第二个元素。

BA 已被“压缩”在一起。

,

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

scala api 有 zip 的定义,类似。

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