Ands this Validation
with another, passed, Validation
.
Ands this Validation
with another, passed, Validation
.
The result of and-ing two Validations
is:
Expression | Result |
---|---|
Pass && Pass | Pass |
Pass && Fail(right) | Fail(right) |
Fail(left) && Pass | Fail(left) |
Fail(left) && Fail(right) | Fail(left) |
As you can see in the above table, no attempt is made by &&
to accumulate errors, which in turn means that
no constraint is placed on the E
type (it need not be an Every
). Instead, &&
short circuits
and returns the first Fail
it encounters. This makes it useful in filters in for
expressions involving Or
s.
Here's an example:
import org.scalactic._
def isRound(i: Int): Validation[ErrorMessage] = if (i % 10 != 0) Fail(i + " was not a round number") else Pass
def isDivBy3(i: Int): Validation[ErrorMessage] = if (i % 3 != 0) Fail(i + " was not divisible by 3") else Pass
for (i <- Good(3) if isRound(i) && isDivBy3(i)) yield i // Result: Bad(3 was not a round number)
the other validation to and with this one
the result of anding this Validation
with the other, passed, Validation
Represents the result of a validation, either the object
Pass
if the validation succeeded, else an instance ofFail
containing an error value describing the validation failure.
BecauseValidation
s are used to filterOr
s infor
expressions orfilter
method calls. For example, consider these methods:isRound
andisDivBy3
take anInt
and return aValidation[ErrorMessage]
, you can use them in filters infor
expressions involvingOr
s of typeInt
Or
ErrorMessage
. Here's an example:Validation
s can also be used to accumulate error usingwhen
, a method that's made available by traitAccumulation
on accumualtingOr
s (Or
s whoseBad
type is anEvery[T]
). Here are some examples: Note: You can think ofValidation
as an “Option
with attitude,” wherePass
is aNone
that indicates validation success andFail
is aSome
whose value describes the validation failure.the type of error value describing a validation failure for this
Validation