gpt4 book ai didi

scala - Scala for/yield 的返回类型

转载 作者:行者123 更新时间:2023-12-03 10:59:03 24 4
gpt4 key购买 nike

我正在阅读 Scala for the Impatient我遇到了一些让我挠头的事情。

以下返回一个字符串:

scala> for ( c<-"Hello"; i <- 0 to 1) yield (c+i).toChar
res68: String = HIeflmlmop

但这会返回一个向量:
scala> for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
res72: scala.collection.immutable.IndexedSeq[Char] = Vector(H, e, l, l, o, I, f, m, m, p)

这两个例子前面的文字是……

"When the body of the for loop starts with yield, then the loop constructs a collection of values, one for each iteration...This type of loop is called a for comprehension. The generated collection is compatible with the first generator.



如果生成的集合与第一个生成器兼容,那么为什么第二个示例不返回 Range 类型,如下所示:
scala> val range = 0 to 1
range: scala.collection.immutable.Range.Inclusive = Range(0, 1)

或者我完全误解了文本的意思,“......生成的集合与第一个生成器兼容。”

最佳答案

for-comprehensions 脱糖为一系列 map , flatMapfilter操作。

当您使用 mapRange ,你会得到一个 Vector输出:

scala> 0 to 2 map (x => x * x)
res12: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 4)

这是因为 Range是一种非常简单的集合,本质上只有两个三个数字:起始值、结束值和步长。如果查看上面映射的结果,您会发现结果值不能用 Range 的某些内容表示。类型。

关于scala - Scala for/yield 的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499091/

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