11

为什么这段代码会导致编译错误

类型不匹配; 发现:(Int,Char)需要:scala.collection.GenTraversableOnce[?]

?

val n = Map(1 -> 'a', 4 -> 'a')
def f(i: Int, c: Char) = (i -> c) 
n.flatMap (e => f(e._1, e._2))
4

1 回答 1

11

改用map()

n.map (e => f(e._1, e._2))

flatMap()假设您正在返回值的集合而不是单个元素。因此,这些将起作用:

n.flatMap (e => List(f(e._1, e._2))
n.flatMap (e => List(f(e._1, e._2), f(e._1 * 10, e._2)))

第二个例子很有趣。对于每个 [key, value] 对,我们返回两个对,然后将它们合并,因此结果是:

Map(1 -> a, 10 -> a, 4 -> a, 40 -> a)
于 2013-01-26T17:51:01.050 回答