유효성 검사 목록을 사용하는 일반적인 방법은 sequence
을 사용하여 목록을 Validation[A, List[B]]
으로 바꾸는 것입니다.이 과정에서 오류가있는 경우 비어 있습니다 (즉, Failure
).
Validation
을 시퀀싱하면 왼쪽 유형의 세미 그룹에서 오류가 즉시 누적됩니다 (Either
과 반대로). 따라서 ValidationNEL
(NEL
은 NonEmptyList
을 나타냄)은 단순히 Validation
대신 사용됩니다. ,
scala> results.sequence
res0: ExceptionsOr[Seq[Int]] = Success(List(13, 42))
우리는 다음과 같은 몇 가지 오류가 있다면 :
import scalaz._, Scalaz._
type ExceptionsOr[A] = ValidationNEL[Exception, A]
그리고 어떤 결과 :
val results: Seq[ExceptionsOr[Int]] = Seq(
"13".parseInt.liftFailNel, "42".parseInt.liftFailNel
)
시퀀싱은 다음 당신에게 줄 것이다 그래서 예를 들어, 당신은이 결과 유형이있는 경우 반면에 :
val results: Seq[ExceptionsOr[Int]] = Seq(
"13".parseInt.liftFailNel, "a".parseInt.liftFailNel, "b".parseInt.liftFailNel
)
val results: Seq[ValidationNEL[A, B]]
results.sequence match {
case Success(xs) => xs.foreach(_.push); containers.foreach(_.start())
case Failure(exceptions) => exceptions.foreach(
logger.error("Error when starting up ccxy gottware", _)
)
}
:
이
scala> results.sequence
res1: ExceptionsOr[Seq[Int]] = Failure(
NonEmptyList(
java.lang.NumberFormatException: For input string: "a",
java.lang.NumberFormatException: For input string: "b"
)
)
따라서 귀하의 경우에는이 같은 것을 써서 :우리는 Failure
(내가 여기 그것을 읽을 수 있도록 출력을 포맷 한 주)로 끝날 것
sequence
및 약 Validation
에 대한 자세한 내용은 here 및 here을 참조하십시오.
무료 사례는 어떻게됩니까? 최소한 유효성 검사가 성공하면 성공하고 싶습니다. – Edmondo1984
당신은'Validation'의 곡식에 맞설 것 같습니다. 7에서는'|||'로 목록을 줄일 수 있지만, 6에서는'Either '의 올바른 투영을 위해 세미 그룹을 사용하는 합계와 같은 것이 필요합니다 (아니면 자신 만의'|||'를 쓸 수 있습니다). –
세미 그룹이 무엇인지 설명하는 자료를 가르쳐 주시겠습니까? – Edmondo1984