sealed trait Validation[+E] extends Product with Serializable
Represents the result of a validation, either the object Pass if the validation
succeeded, else an instance of Fail containing an error value describing the validation failure.
Validations are used to filter Ors in for expressions or filter method calls.
For example, consider these methods:
import org.scalactic._
def isRound(i: Int): Validation[ErrorMessage] = if (i % 10 == 0) Pass else Fail(i + " was not a round number")
def isDivBy3(i: Int): Validation[ErrorMessage] = if (i % 3 == 0) Pass else Fail(i + " was not divisible by 3")
Because isRound and isDivBy3 take an Int and return a Validation[ErrorMessage], you
can use them in filters in for expressions involving Ors of type Int Or ErrorMessage.
Here's an example:
for (i <- Good(3) if isRound(i) && isDivBy3(i)) yield i // Result: Bad(3 was not a round number)
Validations can also be used to accumulate error using when, a method that's made available by trait Accumulation on
accumualting Ors (Ors whose Bad type is an Every[T]). Here are some examples:
import Accumulation._
for (i <- Good(3) when (isRound, isDivBy3)) yield i // Result: Bad(One(3 was not a round number))
for (i <- Good(4) when (isRound, isDivBy3)) yield i // Result: Bad(Many(4 was not a round number, 4 was not divisible by 3))
Note: You can think of Validation as an “Option with attitude,” where Pass is
a None that indicates validation success and Fail is a Some whose value describes
the validation failure.
- E
 the type of error value describing a validation failure for this
Validation
- Source
 - Validation.scala
 
- Alphabetic
 - By Inheritance
 
- Validation
 - Serializable
 - Serializable
 - Product
 - Equals
 - AnyRef
 - Any
 
- Hide All
 - Show All
 
- Public
 - All
 
Abstract Value Members
- 
      
      
      
        
      
    
      
        abstract 
        def
      
      
        &&[F >: E](other: ⇒ Validation[F]): Validation[F]
      
      
      
Ands this
Validationwith another, passed,Validation.Ands this
Validationwith another, passed,Validation.The result of and-ing two
Validationsis:Expression Result Pass && PassPassPass && Fail(right)Fail(right)Fail(left) && PassFail(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 theEtype (it need not be anEvery). Instead,&&short circuits and returns the firstFailit encounters. This makes it useful in filters inforexpressions involvingOrs. 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)- other
 the other validation to and with this one
- returns
 the result of anding this
Validationwith the other, passed,Validation
 - 
      
      
      
        
      
    
      
        abstract 
        def
      
      
        canEqual(that: Any): Boolean
      
      
      
- Definition Classes
 - Equals
 
 - 
      
      
      
        
      
    
      
        abstract 
        def
      
      
        productArity: Int
      
      
      
- Definition Classes
 - Product
 
 - 
      
      
      
        
      
    
      
        abstract 
        def
      
      
        productElement(n: Int): Any
      
      
      
- Definition Classes
 - Product
 
 
Concrete Value Members
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        !=(arg0: Any): Boolean
      
      
      
- Definition Classes
 - AnyRef → Any
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        ##(): Int
      
      
      
- Definition Classes
 - AnyRef → Any
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        ==(arg0: Any): Boolean
      
      
      
- Definition Classes
 - AnyRef → Any
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        asInstanceOf[T0]: T0
      
      
      
- Definition Classes
 - Any
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        clone(): AnyRef
      
      
      
- Attributes
 - protected[java.lang]
 - Definition Classes
 - AnyRef
 - Annotations
 - @native() @throws( ... )
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        eq(arg0: AnyRef): Boolean
      
      
      
- Definition Classes
 - AnyRef
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        equals(arg0: Any): Boolean
      
      
      
- Definition Classes
 - AnyRef → Any
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        finalize(): Unit
      
      
      
- Attributes
 - protected[java.lang]
 - Definition Classes
 - AnyRef
 - Annotations
 - @throws( classOf[java.lang.Throwable] )
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        getClass(): Class[_]
      
      
      
- Definition Classes
 - AnyRef → Any
 - Annotations
 - @native()
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        hashCode(): Int
      
      
      
- Definition Classes
 - AnyRef → Any
 - Annotations
 - @native()
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        isInstanceOf[T0]: Boolean
      
      
      
- Definition Classes
 - Any
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        ne(arg0: AnyRef): Boolean
      
      
      
- Definition Classes
 - AnyRef
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        notify(): Unit
      
      
      
- Definition Classes
 - AnyRef
 - Annotations
 - @native()
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        notifyAll(): Unit
      
      
      
- Definition Classes
 - AnyRef
 - Annotations
 - @native()
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        productIterator: Iterator[Any]
      
      
      
- Definition Classes
 - Product
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        productPrefix: String
      
      
      
- Definition Classes
 - Product
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        synchronized[T0](arg0: ⇒ T0): T0
      
      
      
- Definition Classes
 - AnyRef
 
 - 
      
      
      
        
      
    
      
        
        def
      
      
        toString(): String
      
      
      
- Definition Classes
 - AnyRef → Any
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(): Unit
      
      
      
- Definition Classes
 - AnyRef
 - Annotations
 - @throws( ... )
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(arg0: Long, arg1: Int): Unit
      
      
      
- Definition Classes
 - AnyRef
 - Annotations
 - @throws( ... )
 
 - 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(arg0: Long): Unit
      
      
      
- Definition Classes
 - AnyRef
 - Annotations
 - @native() @throws( ... )