gpt4 book ai didi

scala - 总结两个选项

转载 作者:行者123 更新时间:2023-12-04 04:44:52 25 4
gpt4 key购买 nike

假设我有两个可选的 Int(都可以是 Some 或 None):

val one : Option[Int] = Some(1)
val two : Option[Int] = Some(2)

我的问题如下:是否有任何智能方法可以使用 Scalas 出色的集合方法对它们求和?我意识到我可以将它们合并到一个集合中, flatten它并使用 reduceLeftOption像这样:
(one :: two :: Nil).flatten.reduceLeftOption(_ + _)     // Some(3)

但是,上述解决方案意味着创建一个新系列,并生活在一个富裕而发达的世界中,而我可能会沉浸在所有其他第一世界事件中,而这需要时间。在这样一个编程对我们这样的程序员来说越来越奢侈的世界里,一定有一个或多个奢侈的第一世界答案,对吧?

编辑:所以为了说明问题,这里有一些例子:

one = Some(1)two = Some(2)我们应该有一些(3)

one = Some(1)two = None我们应该有一些(1)

one = Nonetwo = Some(2)我们应该有一些(2)

如果两者都 onetwoNone我们应该没有,因为都没有 onetwo可以正确总结。

希望澄清事情:-)

最佳答案

强制性 scalaz 答案是使用 scalaz Option monoid:

scala> one |+| two
res0: Option[Int] = Some(3)

它会做你想做的关于 None 的事情:
scala> two |+| None
res1: Option[Int] = Some(2)

scala> none[Int] |+| none[Int]
res2: Option[Int] = None

none 方法是 scalaz 的一个方法,它有助于类型推断,因为它不返回 None <: Option[Nothing]它返回一个 Option[Int] , Some 有一个类似的方法,它为任何给定的 A 返回一个 Option[A] 而不是 Some[A]:
scala> 1.some |+| 2.some
res3: Option[Int] = Some(3)

关于scala - 总结两个选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com