我有下一个代码
val listOption: List[Option[Int]] = List(1.some, none, 2.some)
我想折叠元素,我写下一个代码
val result = listx.fold(0.some)((acc, el) => {
(acc, el) match {
case (Some(a), Some(b)) => Some(a + b)
case (Some(a), _) => Some(a)
case (_, Some(b)) => Some(b)
case _ => el
}
})
println(result.getOrElse(0)) // => 3
这很好用,但我在 scalaz 来源中看到了下一个 tric
val composeFold = Foldable[List] compose Foldable[Option]
composeFold.fold(listOption) // => 3
但我不明白它是如何正确工作的,为什么 scalaz 不将此方法混合到实例中,以及 scala和 scalazlistOption
之间有什么区别fold
fold