首页 > 解决方案 > scala 通用双括号文字

问题描述

我在学习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)

标签: scalagenericsliterals

解决方案


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

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

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

和已被“压缩”在一起AB


推荐阅读