当我尝试
时 Some(1).flatMap(_ => List(2))
我得到了
error: type mismatch;
found : List[Int]
required: Option[?]
但是Some(1).map(_ => List(2)).flatten
正在运作。为什么我在第一种情况下会出现编译错误?
答案 0 :(得分:5)
如果您确定列表中包含零个或一个元素,则可以执行此操作:
option.flatMap(_ => list.headOption)
答案 1 :(得分:4)
你不能这样做,因为类型系统禁止这样做。 Option.flatMap的类型是
final def flatMap[B](f: (A) ⇒ Option[B]): Option[B]
因此,您的函数必须返回Option类型,而不是List类型。
如果要转换为其他类型,则必须使用.map(...)。flatten
答案 2 :(得分:3)
不是说它不适用于其他Scala版本,但它对我不起作用:
scala> Some(1).map(_ => List(2)).flatten
<console>:8: error: Cannot prove that List[Int] <:< Option[B].
Some(1).map(_ => List(2)).flatten
^
更重要的是,Some("abc").flatMap(s => s.toList)
或其等效Some(List('a','b','c')).flatten
的结果是什么?