析取模式匹配
Pattern Matching on Disjunction
鉴于以下情况:
scala> val err: \/[String, Boolean \/ Int] = -\/("bad")
err: scalaz.\/[String,scalaz.\/[Boolean,Int]] = -\/(bad)
我写了一个函数,它接受一个 \/[String, Boolean \/ Int]
和 returns 一个 Boolean \/ Int
:
scala> def f(x: \/[String, Boolean \/ Int]): \/[Boolean, Int] = x match {
| case -\/(_) => -\/(false)
| case \/-(y) => y
| }
f: (x: scalaz.\/[String,scalaz.\/[Boolean,Int]])scalaz.\/[Boolean,Int]
它似乎按预期工作:
scala> f(err)
res6: scalaz.\/[Boolean,Int] = -\/(false)
scala> f(\/-(\/-(5))
| )
res7: scalaz.\/[Boolean,Int] = \/-(5)
是否有更简洁、惯用的 scalaz 方法来做到这一点?
def f(x: \/[String, Boolean \/ Int]) = x.getOrElse(-\/(false))
鉴于以下情况:
scala> val err: \/[String, Boolean \/ Int] = -\/("bad")
err: scalaz.\/[String,scalaz.\/[Boolean,Int]] = -\/(bad)
我写了一个函数,它接受一个 \/[String, Boolean \/ Int]
和 returns 一个 Boolean \/ Int
:
scala> def f(x: \/[String, Boolean \/ Int]): \/[Boolean, Int] = x match {
| case -\/(_) => -\/(false)
| case \/-(y) => y
| }
f: (x: scalaz.\/[String,scalaz.\/[Boolean,Int]])scalaz.\/[Boolean,Int]
它似乎按预期工作:
scala> f(err)
res6: scalaz.\/[Boolean,Int] = -\/(false)
scala> f(\/-(\/-(5))
| )
res7: scalaz.\/[Boolean,Int] = \/-(5)
是否有更简洁、惯用的 scalaz 方法来做到这一点?
def f(x: \/[String, Boolean \/ Int]) = x.getOrElse(-\/(false))