2016-03-01 30 views
2

我如何积累斯卡拉蒂克的或使用withGoodSeq[Or]斯卡拉克尔积累与Seq的良好关系

所以我有类似下面的代码:

val cs: Seq[BigDecimal Or ErrorMessage] 

,所以我需要做的事情时,在CS的所有值都Good这样

Accumulation.withGood(cs){...} 

任何帮助表示赞赏

回答

0

这里的单程:

object worksheet { 
     import org.scalactic._ 

     val test1: Seq[Or[Long, Every[ErrorMessage]]] = Seq(
      Good(1L), 
      Good(2L), 
      Bad(One("An error")), 
      Good(4L), 
      Bad(One("Another error")) 
     )           //> test1 : Seq[org.scalactic.Or[Long,org.scalactic.Every[org.scalactic.ErrorMe 
                 //| ssage]]] = List(Good(1), Good(2), Bad(One(An error)), Good(4), Bad(One(Anoth 
                 //| er error))) 
     val test2: Seq[Or[Long, Every[ErrorMessage]]] = Seq(
      Good(1L), 
      Good(2L), 
      Good(3L), 
      Good(4L), 
      Good(5L) 
     )           //> test2 : Seq[org.scalactic.Or[Long,org.scalactic.Every[org.scalactic.ErrorMe 
                 //| ssage]]] = List(Good(1), Good(2), Good(3), Good(4), Good(5)) 

     test1.foldLeft(Good(Seq()): Or[Seq[Long], Every[ErrorMessage]]) { (x, y) => 
     Accumulation.withGood(x, y) { (x, y) => 
      x :+ y 
     } 
     }            //> res0: org.scalactic.Or[Seq[Long],org.scalactic.Every[org.scalactic.ErrorMess 
                 //| age]] = Bad(Many(An error, Another error)) 

     test2.foldLeft(Good(Seq()): Or[Seq[Long], Every[ErrorMessage]]) { (x, y) => 
     Accumulation.withGood(x, y) { (x, y) => 
      x :+ y 
     } 
     }            //> res1: org.scalactic.Or[Seq[Long],org.scalactic.Every[org.scalactic.ErrorMess 
                 //| age]] = Good(List(1, 2, 3, 4, 5)) 

    } 
0

或者,根据http://www.scalactic.org/user_guide/OrAndEvery

object worksheet { 
    println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet 

    import org.scalactic._ 
    import Accumulation._ 

    val test1: Seq[Or[Long, Every[ErrorMessage]]] = Seq(
     Good(1L), 
     Good(2L), 
     Bad(One("An error")), 
     Good(4L), 
     Bad(One("Another error")) 
    )          //> test1 : Seq[org.scalactic.Or[Long,org.scalactic.Every[org.scalactic.ErrorMe 
               //| ssage]]] = List(Good(1), Good(2), Bad(One(An error)), Good(4), Bad(One(Anoth 
               //| er error))) 
    val test2: Seq[Or[Long, Every[ErrorMessage]]] = Seq(
     Good(1L), 
     Good(2L), 
     Good(3L), 
     Good(4L), 
     Good(5L) 
    )          //> test2 : Seq[org.scalactic.Or[Long,org.scalactic.Every[org.scalactic.ErrorMe 
               //| ssage]]] = List(Good(1), Good(2), Good(3), Good(4), Good(5)) 

    test1.combined        //> res0: org.scalactic.Or[Seq[Long],org.scalactic.Every[org.scalactic.ErrorMess 
               //| age]] = Bad(Many(An error, Another error)) 

    test2.combined        //> res1: org.scalactic.Or[Seq[Long],org.scalactic.Every[org.scalactic.ErrorMess 
               //| age]] = Good(List(1, 2, 3, 4, 5)) 
}