2017-04-07 22 views
2

這樣的事情可以用scalaz來實現嗎?從here簡單的例子,左,右與斯卡拉

object MyObject { 

    def divideXByY(x: Int, y: Int): Either[String, Int] = { 
    if (y == 0) Left("Cannot divide by 0") 
    else Right(x/y) 

    } 

    def main(args: Array[String]) { 

    println(divideXByY(12, 3)) 
    println(divideXByY(12, 0)) 

    divideXByY(12, 3) match { 
     case Right(a) => println(s"We got: ${a}") 
     case Left(b) => println(s"We got: ${b}") 
    } 
    } 
} 

回答

3
import scalaz.{-\/, \/, \/-} 

object MyObject { 

    def divideXByY(x: Int, y: Int): Either[String, Int] = { 
    if (y == 0) Left("Cannot divide by 0") 
    else Right(x/y) 

    } 

    def divideXByYScalaz(x: Int, y: Int): \/[String, Int] = { 
    if (y == 0) -\/("Cannot divide by 0") 
    else \/-(x/y) 
    } 

    def main(args: Array[String]) { 

    println(divideXByY(12, 3)) 
    println(divideXByY(12, 0)) 

    divideXByY(12, 3) match { 
     case Right(a) => println(s"We got: ${a}") 
     case Left(b) => println(s"We got: ${b}") 
    } 

    println("Working with scalaz") 

    println(divideXByYScalaz(12, 3)) 
    println(divideXByYScalaz(12, 0)) 

    divideXByYScalaz(12, 3) match { 
     case -\/(a) => println(s"We got: ${a}") 
     case \/-(b) => println(s"We got: ${b}") 
    } 
    } 
} 
拍攝的實施例