我是斯卡拉的新手。我正在玩它。 如何从代码库的下面的变量i中获取Int类型。
case class Return[A](a: Either[Throwable, A])
val e: Either[Throwable, Int] = Right(12)
val i:Return[Int] = Return(e)
基本上,我想要下面的东西。
val a:Int = i
答案 0 :(得分:2)
直接的方法是在get
投影上执行Right
。
val r1: Int = i.a.right.get
但这不安全,因为如果Either
为Left
,它会抛出运行时异常。
您可以测试安全性并提供默认值。
val r2: Int = if (i.a.isRight) i.a.right.get else -1
但fold
对Either
的惯用方法更为惯用。
val r3: Int = i.a.fold(l => -1, identity)
当然,如果你想重新抛出异常而不是提供默认值,你可以这样做。
val r4: Int = i.a.fold(l => throw l, identity)
答案 1 :(得分:0)
您也可以尝试使用匹配大小写
val intData: Int = i match {
case Right(data) => data
case Left(ex) => throw new Exception()
}
在您的情况下,如果您只想在Left情况下抛出异常,则输出将始终为Int。