scala - Map[(A, B)] 是什么意思?
scala - What Map[(A, B)] mean?
我正在阅读 Scala Map 文档,对这个方法签名感到困惑
def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Map[(A, B)]
Map[(A, B)]
是什么意思?和Map[A, B]
一样吗?谢谢
Link 到文档:
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”。它是一个 simplified 签名,指示该方法的最常见用法。 真正的签名是:
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]
的语法糖,即一对(又名二元组)类型。
Is it the same as Map[A, B]
?
不,Map[Tuple2[A, B]]
与 Map[A, B]
不同:前者将 Map
类型构造函数应用于 单个 参数 (A, B)
而后者将 Map
类型构造函数应用于 两个 参数,A
和 B
.
请注意 Map
类型构造函数有两个参数,因此前者只是一个错误:您不能将 Map
类型构造函数仅应用于单个参数,您需要两个参数。
记住你看到的签名只是一个用例,它是由一个human写给human阅读的,它是类型检查器未验证。因此,它可能包含错误。
另请注意,整个集合层次结构中有很多重复的类型签名和用例,它们是由其他脚本生成的。看起来其中一个脚本只是为 Map.zipAll
生成了错误的签名(请注意,在 Map
上的其他 zip
变体中也存在相同的错误)。
一个小实验表明,zip
将 map 的键值对作为结果对的第一个元素,将 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 文档,对这个方法签名感到困惑
def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Map[(A, B)]
Map[(A, B)]
是什么意思?和Map[A, B]
一样吗?谢谢
Link 到文档:
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”。它是一个 simplified 签名,指示该方法的最常见用法。 真正的签名是:
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]
的语法糖,即一对(又名二元组)类型。
Is it the same as
Map[A, B]
?
不,Map[Tuple2[A, B]]
与 Map[A, B]
不同:前者将 Map
类型构造函数应用于 单个 参数 (A, B)
而后者将 Map
类型构造函数应用于 两个 参数,A
和 B
.
请注意 Map
类型构造函数有两个参数,因此前者只是一个错误:您不能将 Map
类型构造函数仅应用于单个参数,您需要两个参数。
记住你看到的签名只是一个用例,它是由一个human写给human阅读的,它是类型检查器未验证。因此,它可能包含错误。
另请注意,整个集合层次结构中有很多重复的类型签名和用例,它们是由其他脚本生成的。看起来其中一个脚本只是为 Map.zipAll
生成了错误的签名(请注意,在 Map
上的其他 zip
变体中也存在相同的错误)。
一个小实验表明,zip
将 map 的键值对作为结果对的第一个元素,将 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
。