为什么我不能使用下划线对List [Option]进行flatMap?

Dan*_*org 3 scala

我为什么要写

val flat: List[Int] = List(Some(1), Some(2)).flatMap(i => i)
Run Code Online (Sandbox Code Playgroud)

但不是

val flat: List[Int] = List(Some(1), Some(2)).flatMap(_)
Run Code Online (Sandbox Code Playgroud)

whe*_*ies 7

下划线是变量的占位符.它本身并不是一种功能.flatMap需要一个功能.

此外,在这种情况下,有一个flatten被定义的方法List为它Option具有内Predef,使得你写什么都可以浓缩成仅仅是调用的隐式转换,List(Some(1)).flatten

  • 你也可以在`Predef.scala`中使用`identity`定义为`def identity [A](x:A):A = x`,其中像'flatten`这样的便利不在手边. (6认同)