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.Validation
s are used to filterOr
s infor
expressions orfilter
method calls. For example, consider these methods:Because
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 of
Validation
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