我有一个 List[Option[Int]] 并想使用应用函子对其进行求和。
从[1]我了解到它应该类似于以下内容
import scalaz._
import Scalaz._
List(1,2,3).map(some(_)).foldLeft(some(0))({
case (acc,value) => (acc <|*|> value){_+_}
})
但是我根本无法找出正确的写法。
如果有人能帮助我解决这个问题,我会很高兴。
非常感谢
[1] 如何在 Scala 中组合 Option 值? https://stackoverflow.com/questions/2712390/how-to-combine-option-values-in-scala
Edit
感谢所有精彩的答案。
如果列表中有 None,我希望它返回 None。
我正在尝试用 Option/Either 替换 Null/Exception ,看看是否可以生成一些可用的代码。
某些函数将填充我的列表,我想尽可能简单地进一步处理它,而不检查其中一个元素是否为“无”。它的工作方式应该与异常类似,我不必在函数中检查它,而是让调用者处理它。
为此,您实际上并不需要 Scalaz。您可以展平列表,这会将其转换为List[Int]
,删除任何项目None
。然后你可以减少它:
List(Some(1), None, Some(2), Some(3), None).flatten.reduce(_ + _) //returns 6: Int
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)