gpt4 book ai didi

Scala:为什么 Map 上的 `for` 理解有时会产生一个列表?

转载 作者:行者123 更新时间:2023-12-03 04:16:05 25 4
gpt4 key购买 nike

为什么在下面的代码示例中,isAListfor 理解生成一个 List,而其他两个生成 Map?我想不出任何原因 - 唯一的区别似乎是 isAList 的理解声明了两个变量,而其他的理解声明了 1 或 0。

object Weird {
def theMap: Map[Int, String] =
Map(1 -> "uno", 2 -> "dos", 3 -> "tres")

def main(args: Array[String]) {

val isAMap = for {
(key, value) <- theMap
} yield (key*2 -> value*2)

val isAlsoAMap = for {
(key, value) <- theMap
doubleKey = key*2
} yield (doubleKey -> value*2)

val isAList = for {
(key, value) <- theMap
doubleKey = key*2
doubleValue = value*2
} yield (doubleKey -> doubleValue)

println(isAMap)
println(isAlsoAMap)
println(isAList)
}
}

输出

Map(2 -> unouno, 4 -> dosdos, 6 -> trestres)
Map(2 -> unouno, 4 -> dosdos, 6 -> trestres)
List((2,unouno), (4,dosdos), (6,trestres))

我对 Scala 比较陌生,所以如果我对某些事情过于天真,请道歉!

最佳答案

最近讨论的 ML:

https://groups.google.com/forum/#!msg/scala-internals/Cmh0Co9xcMs/D-jr9ULOUIsJ

https://issues.scala-lang.org/browse/SI-7515

建议的解决方法是使用元组来传播变量。

scala> for ((k,v) <- theMap; (dk,dv) = (k*2,v*2)) yield (dk,dv)
res8: scala.collection.immutable.Map[Int,String] = Map(2 -> unouno, 4 -> dosdos, 6 -> trestres)

有关元组机制的更多信息:

What are the scoping rules for vals in Scala for-comprehensions

关于Scala:为什么 Map 上的 `for` 理解有时会产生一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17377526/

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