Option[Int] Scala 使用折叠的总和列表

Dam*_*ero 0 functional-programming scala fold

我试图对列表中的所有元素求和,它们的类型为 Option[Int],如果其中任何一个是 None,则整个结果为 None,如果都是 Some(value),我想要所有元素的总和:

val ls = List(Some(2), Some(5), Some(4), Some(1))

ls.fold(None)((rs,x) => for(n <- x; m <- rs) yield {n+m})
Run Code Online (Sandbox Code Playgroud)

但无论如何我总是得到 None 。

Fun*_*abe 5

也试试这个:

val ls = List(Some(2), Some(5), Some(4), Some(1))
val sum = ls.foldLeft(Option(0))((so, io) => so.flatMap(s => io.map(s + _)))
Run Code Online (Sandbox Code Playgroud)

如果列表中的任何单个值是None,则sum报告为None;否则 - 如果定义了所有值 - 你会得到一个Some包含元素总和的值。如果列表为空,那么您将得到Some(0)结果。