gpt4 book ai didi

scala - 为什么Option没有折叠方法?

转载 作者:行者123 更新时间:2023-12-03 07:52:15 24 4
gpt4 key购买 nike

我想知道scala.Option为什么没有像这样定义的fold方法:

fold(ifSome: A => B , ifNone: => B)

相当于
map(ifSome).getOrElse(ifNone)

有没有比使用 map + getOrElse好呢?

最佳答案

你可以做:

opt foldLeft (els) ((x, y) => fun(x))

要么
(els /: opt) ((x,y) => fun(x))

(两种解决方案都将按值评估 els,这可能不是您想要的。感谢 Rex Kerr指出了它。)

编辑:

但是您真正想要的是Scalaz的 catamorphism cata(基本上是一个 fold,它不仅处理 Some值,而且映射了 None部分,这就是您所描述的)
opt.cata(fun, els)

定义为(其中 value是拉皮条的选项值)
def cata[X](some: A => X, none: => X): X = value match {
case None => none
case Some(a) => some(a)
}

等效于 opt.map(some).getOrElse(none)

尽管我要指出,只有在cata表示“更自然”时才使用cata。在许多情况下,一个简单的 mapgetOrElse就足够了,尤其是当它涉及可能链接许多 map时。 (当然,尽管您也可以将 fun与功能组合链接在一起,但这取决于您是否要专注于功能组合或值转换。)

关于scala - 为什么Option没有折叠方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328007/

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