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 。
也试试这个:
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)结果。