gpt4 book ai didi

Scala:zipped 产生什么,为什么可以成对映射?

转载 作者:行者123 更新时间:2023-12-04 04:42:27 24 4
gpt4 key购买 nike

earlier question 中关于 zipWith,@Martin Odersky 建议不要像

这样的东西
 foo zipWith(_ + _) bar

(其中 foobarSeq 的)以下是更好的(并且实际上在 Scala 中有效)。

(foo, bar).zipped map (_ + _)

我的问题是 map 如何知道它的参数(表面上看起来是一对)应该分成两个元素?

以下实际上在工作表中运行。

val list1 = List(1, 2, 3, 4)                    //> list1  : List[Int] = List(1, 2, 3, 4)
val list2 = List(5, 6, 7, 8) //> list2 : List[Int] = List(5, 6, 7, 8)
val zippedResult = (list1, list2).zipped //> list3 : scala.runtime.Tuple2Zipped[Int,List[Int],Int,List[Int]] = scala.run
//| time.Tuple2Zipped@f4bf78da
zippedResult.mkString(", ") //> res4: String = (1,5), (2,6), (3,7), (4,8)
zippedResult map (_ + _) //> res5: List[Int] = List(6, 8, 10, 12)

我看到 zippedResult 实际上有 4 个类型参数,而不仅仅是一对列表。

val list3 = List((1, 5), (2, 6), (3, 7), (4, 8))
//> list3a : List[(Int, Int)] = List((1,5), (2,6), (3,7), (4,8))
list3 == zippedResult //> res6: Boolean = false

我不会写

list3 map(_ +_ )

那么什么是 Tuple2Zipped 类型,它可以为 map 函数提供两个参数? zipped 是创建它实例的唯一方法吗?

最佳答案

runtime.Tuple2Zipped .您可以像这样手动创建一个实例:

val zipped = new Tuple2Zipped(Seq(1, 2), Seq(3, 4))

这是 source of map method .

方法 map 声明如下(简化):

def map[B](f: (El1, El2) => B): Seq[B]

Tuple2Zipped 不是任何 Scala 集合类型的后代,因此它的 map 方法与常规 Scala 集合的 map 方法没有任何关系。

关于Scala:zipped 产生什么,为什么可以成对映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745995/

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