2

解決策は、if-else の明らかなパターン マッチングに基づいていないことを期待しています。オプションのmapとの組み合わせのように、それを行うためのより自然な方法があるはずです。getOrElse

4

3 に答える 3

6

Validationfold副作用を生成するために採用できる方法があります。

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))
  }
}

または、顔のあるオペレーターが好きかもしれません。顔文字演算子は機能コミュニティで名前を持っていますか? 私の現在の気分を考えると、mope のように emoperator を試してみますが、それは狭すぎるかもしれません。それとも「ロロップ」?しかし、 x :-> f のような使い方は明らかに「顔の表情」です。

于 2012-09-16T01:18:55.820 に答える