스 카즈에 처음 오셨습니까? Scalaz의 /는 표준 라이브러리를 대신 할 예정이지만 어느 쪽이든간에 값을 가져 오는 데 문제가 있습니다. 비교 간단한 테스트 클래스/하나에 :스칼라 스 분리가 표준 라이브러리의 어느 것을 대체 할 것인가?
package com.example
import scalaz.\/
import scalaz.syntax.either._
class TestEither {
def returnEitherScalaz(p: Int): \/[Int, String] = {
if (p > 0)
s"AOK".right
else
p.left
}
def returnEitherDefault(p: Int): Either[Int, String] = {
if (p > 0)
Right(s"AOK")
else
Left(p)
}
}
object TestRunner {
def main(args: Array[String]): Unit = {
val te = new TestEither
val testValue = 1
val resultS = te.returnEitherScalaz(testValue)
println("result=" + resultS)
println("isRight=" + resultS.isRight)
println("isLeft=" + resultS.isLeft)
val rightS = resultS.right.getOrElse("not right")
println("right=" + rightS)
val leftS = resultS.left.getOrElse("not left")
println("left=" + leftS)
val resultD = te.returnEitherDefault(testValue)
println("result=" + resultD)
println("isRight=" + resultD.isRight)
println("isLeft=" + resultD.isLeft)
val rightD = resultD.right.getOrElse("not right")
println("right=" + rightD)
val leftD = resultD.left.getOrElse("not left")
println("left=" + leftD)
}
}
오른쪽에 다음 출력을 생성 (testValue = 1)
result=\/-(AOK)
isRight=true
isLeft=false
right=\/-(AOK)
left=not left
result=Right(AOK)
isRight=true
isLeft=false
right=AOK
left=not left
왼쪽은 (testValue = 0)
result=-\/(0)
isRight=false
isLeft=true
right=-\/(0)
left=not left
result=Left(0)
isRight=false
isLeft=true
right=not right
left=0
이가요 Scalaz의 버그/아니면 그냥 미쳤어? 필자는 가장 최근의 Scala/Scalaz 버전 2.12.1/7.2.8에서 2.11.8/7.2.6으로 다시 시도했습니다.
동일한 결과를 얻을 것입니다 미친. val rightS = resultS.right.getOrElse ("올바르지 않습니다") 왜 전화를 걸었습니까? –