如何从scala中的任一类获取Int类型?

时间:2016-11-24 06:34:49

标签: scala

我是斯卡拉的新手。我正在玩它。 如何从代码库的下面的变量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

2 个答案:

答案 0 :(得分:2)

直接的方法是在get投影上执行Right

val r1: Int = i.a.right.get

但这不安全,因为如果EitherLeft,它会抛出运行时异常。

您可以测试安全性并提供默认值。

val r2: Int = if (i.a.isRight) i.a.right.get else -1

foldEither的惯用方法更为惯用。

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。