【发布时间】:2016-01-29 17:01:31
【问题描述】:
这是我的代码
def testMap() = {
val x = Map(
1 -> Map(
2 -> 3,
3 -> 4
),
5 -> Map(
6 -> 7,
7 -> 8
)
)
for {
(a, v) <- x
(b, c) <- v
} yield {
a
}
}
上面的代码给出了
List(1, 1, 5, 5)
如果我将for理解a的yield值改为(a, b),结果是
Map(1 -> 3, 5 -> 7)
如果我把(a, b)改成(a, b, c),结果是
List((1,2,3), (1,3,4), (5,6,7), (5,7,8))
我的问题是,在这种理解中确定结果类型背后的机制是什么?
【问题讨论】:
-
它尝试匹配原始类型。当你返回对时,你最终会得到一个地图,否则如果无法制作地图,那么你会得到一个列表。
-
你能解释一下代码和编译器的行为吗?
-
我以为我刚刚做到了 :) 如果您以
Map开头并产生对,那么您最终会得到Map。否则,你会得到一个List,无论你产生什么类型。究竟是什么还不清楚? -
如果要对代码进行脱糖,请参阅:stackoverflow.com/a/9892350/651140
scala -print file.scala
标签: scala dictionary flatmap