相关疑难解决方法(0)

为什么Option没有折叠方法?

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

fold(ifSome: A => B , ifNone: => B)
Run Code Online (Sandbox Code Playgroud)

相当于

map(ifSome).getOrElse(ifNone)
Run Code Online (Sandbox Code Playgroud)

有没有比使用map+ 更好的getOrElse

scala map fold scala-option

35
推荐指数
4
解决办法
8639
查看次数

选项上的折叠关系是什么,是等等还是折叠在Traversable上?

Scalaz提供了一个名为方法fold关于各种ADT的如Boolean,Option[_],Validation[_, _],Either[_, _]等.该方法基本上发生在对应于所有可能的情况该给定ADT的功能.换句话说,模式匹配如下所示:

x match {
  case Case1(a, b, c) => f(a, b, c)
  case Case2(a, b) => g(a, b)
  .
  .
  case CaseN => z
}
Run Code Online (Sandbox Code Playgroud)

相当于:

x.fold(f, g, ..., z)
Run Code Online (Sandbox Code Playgroud)

一些例子:

scala> (9 == 8).fold("foo", "bar")
res0: java.lang.String = bar

scala> 5.some.fold(2 *, 2)
res1: Int = 10

scala> 5.left[String].fold(2 +, "[" +)
res2: Any = 7

scala> 5.fail[String].fold(2 +, "[" +)
res6: Any = 7
Run Code Online (Sandbox Code Playgroud)

同时,对于Traversable[_] …

functional-programming scala category-theory scalaz catamorphism

10
推荐指数
2
解决办法
2031
查看次数