gpt4 book ai didi

scala - Map[(A, B)] 是什么意思?

转载 作者:行者123 更新时间:2023-12-01 01:51:31 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why are scaladoc method signatures wrong?

(1 个回答)


4年前关闭。




我正在阅读 Scala Map 文档,并对此方法签名感到困惑

def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Map[(A, B)]

什么 Map[(A, B)]意思?是不是和 Map[A, B]一样?谢谢

链接到文档:

http://www.scala-lang.org/api/current/scala/collection/immutable/Map.html

最佳答案

I'm reading the Scala Map doc, and got confused by this method signature

def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Map[(A, B)]


这不是方法签名。这是“ use case signature”。它是一个简化的签名,表示该方法的最常见用法。真正的签名是:
def zipAll[B, A1 >: (K, V), That](that: GenIterable[B], thisElem: A1, thatElem: B)(implicit bf: CanBuildFrom[Map[K, V], (A1, B), That]): That

What does Map[(A, B)] mean?


(A, B)Tuple2[A, B] 的语法糖,即一对(又名 2 元组)类型。

Is it the same as Map[A, B]?



不, Map[Tuple2[A, B]]Map[A, B] 不一样: 前者适用 Map类型构造函数到单个参数 (A, B)而后者适用 Map将构造函数键入两个参数, AB .

请注意 Map类型构造函数有两个参数,所以前者只是一个错误:你不能应用 Map类型构造函数只有一个参数,你需要两个。

请记住,您看到的签名只是一个用例,它是由人类编写供人类阅读的,它是 类型检查器未验证 .因此,它可能包含错误。

另请注意,整个集合层次结构中有许多重复的类型签名和用例,它们是由附加脚本生成的。看起来这些脚本之一只是为 Map.zipAll 生成了错误的签名。 (请注意,在 zip 上的其他 Map 变体中也存在相同的错误)。

一个小实验表明 zip将映射的键值对作为结果对的第一个元素和来自 that 的元素集合作为结果对的第二个元素,并从中构造一个映射,这将产生一个映射,该映射将原始键值对作为键和 other元素作为值:
Map("one" → 1, "two" → 2) zip Seq('a, 'b, 'c)
//=> Map((one, 1) -> 'a, (two, 2) -> 'b)

所以,简化的用例签名应该是这样的:
def zipAll[A](that: collection.Iterable[A], thisElem: (K, V), thatElem: A): Map[(K, V), A]

看起来脚本被混淆并替换 (K, V)A在签名中。

关于scala - Map[(A, B)] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44198367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com