我希望解决方案不是基于 if-else 的明显模式匹配。我相信应该有更自然的方法来做到这一点,比如map
Option的组合getOrElse
。
问问题
145 次
3 回答
6
Validation
有一种fold
可以选择产生副作用的方法:
v.fold(e => println("Ouch, we got "+e), a => println("Yay!! We got "+a))
于 2012-09-14T14:04:41.817 回答
1
Validation.fold
用字符填充答案...
于 2012-09-14T14:04:34.880 回答
1
为了完整起见,您可能希望在对 Validation 产生副作用后对其进行操作:
object Test {
import scalaz._
import syntax.bifunctor._
import syntax.validation._
def f(s: String) = { println(s"Err ${s}"); s }
def g(i: Int) = { println(s"Int ${i}"); i }
def m(x: Validation[String, Int]) = x bimap (f, g)
def n(x: Validation[String, Int]) = f _ <-: x :-> g _
def main(args: Array[String]) {
val v = 17.success[String]
val w = "nope".failure[Int]
println(m(v) map (i => i + 1))
println(m(v)); println(m(w))
println(n(v)); println(n(w))
}
}
或者,您可能只是喜欢有面孔的操作员。表情运营商在功能社区有名字吗?鉴于我目前的心情,我会尝试 emoperator,就像 mope 一样,但这可能太窄了。还是“咯咯”?但是像 x :-> f 这样的用法显然是一种“面部表情”。
于 2012-09-16T01:18:55.820 回答