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




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

最佳答案

使用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)))

第二个例子很有趣。对于每个[键,值]对,我们返回两对,然后将其合并,因此结果为:
Map(1 -> a, 10 -> a, 4 -> a, 40 -> a)

关于Scala类型不匹配错误,需要GenTraversableOnce [?],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14539701/

10-16 17:30