为什么这个_._ 1速记不起作用?

joh*_*sam 1 scala

我试图压扁一张地图.不知道为什么1)工作但2)不是.

   scala> val m = Map(1->2, 2->4, 3->6)
    m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 2 -> 4, 3 -> 6)
Run Code Online (Sandbox Code Playgroud)

1)

scala> m.flatMap(e => List(e._1, e._2)
     | )
res11: scala.collection.immutable.Iterable[Int] = List(1, 2, 2, 4, 3, 6)
Run Code Online (Sandbox Code Playgroud)

2)

 scala> m.flatMap(List(_._1,_._2))
    <console>:12: error: missing parameter type for expanded function ((x$1) => x$1._1)
           m.flatMap(List(_._1,_._2))
                          ^
    <
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 7

List(_._1, _._2)相当于List(x => x._1, x => x._2).这就是每个表达式使用的_是它自己的lambda,并且两个lambdas都作为参数给出List.

使用_快捷方式无法实现您想要的功能,因此您必须使用选项1.

  • 或选项3:`m.flatMap {case(k,v)=> List(k,v)}` (3认同)