输入与map和flatMap不匹配

sc_*_*ray 1 types scala map

在尝试使用scala中的Options时,我遇到了这个特殊的问题.

我开始创建List [Option [Int]],如下所示:

scala> List(Some(1),Some(2),None,Some(3))
res0: List[Option[Int]] = List(Some(1), Some(2), None, Some(3))
Run Code Online (Sandbox Code Playgroud)

然后我尝试在res0中列表的条目上映射一个加法,如下所示:

scala> res0 map (_ + 1)
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

<console>:9: error: type mismatch;
 found   : Int(1)
 required: String
              res0 map (_ + 1)
                            ^
Run Code Online (Sandbox Code Playgroud)

然后我尝试在条目上添加flatMapping,如下所示:

scala> res0 flatMap (_ + 1)
Run Code Online (Sandbox Code Playgroud)

这给了我同样的错误:

<console>:9: error: type mismatch;
 found   : Int(1)
 required: String
              res0 flatMap (_ + 1)
                                ^
Run Code Online (Sandbox Code Playgroud)

但是类似的东西res0.flatMap(r => r)可以很好地结果:

res9: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么将地图添加到1会对地图和flatMap都失败吗?

Dan*_*ral 6

你尝试的前两件事失败了,因为你试图添加Option一个Int,这是不可能的.

发生在怪异的错误消息,因为Scala的假设,因为Option没有一个+方法,您试图String串联,但你必须到任何一个添加Option到一个StringString一个Option,和你正在做的都不是,因此错误信息.

在最后一种情况下,您没有尝试添加任何内容,您只是Option按原样返回,因此没有错误消息.