10

プロジェクトでは、HTTPパラメーターを検証するためにscalaz検証トレイトを使用しています。一般的なケースは、検証された値をいくつか取得し、それらすべてが有効な場合にのみ必要なアクションを実行し、そうでない場合はエラーのリストを返します。

(pavam1Val.liftFailNel |@|
 param2Val.liftFailNel |@|
 param3Val.liftFailNel) {
    getSomeResponse(_, _, _)
}

| @ |のため、8つを超えるパラメーターを使用する必要があるまで、これはうまく機能します。演算子は、8つの引数に制限されているApplicativeBuilderを作成します。このような一括検証を実行する別の方法はありますか?できればコードを読みやすくしますか?

4

2 に答える 2

11
于 2011-04-22T21:54:06.420 に答える
2

A couple more ways to do it:

  1. Lift the relevant function to Validation context, and then apply it to the values.

    getSomeResponse.lift[({ type L[X] = Validation[Y, X] })#L] apply (
      param1Val, param2Val, param3Val
    )
    
  2. Use monad comprehension.

    for {
      x1 <- param1Val
      x2 <- param2Val
      x3 <- param3Val
    } yield getSomeResponse(x1, x2, x3)
    
于 2012-02-12T17:16:43.863 に答える