2016-11-24 18 views
1

我是scala的新手。我正在玩它。 如何从下面的代码库中的变量i中获取Int类型。如何从Scala中的Either类获取Int类型?

case class Return[A](a: Either[Throwable, A]) 
val e: Either[Throwable, Int] = Right(12) 
val i:Return[Int] = Return(e) 

基本上,我想要下面的东西。

VAL一:INT =我

+0

如果'e'是'Left',你想要发生什么? –

+0

忽略或抛出错误。我只想检索Int部分并将其分配给一个变量。 – Akash

回答

2

的直接的方式是在Right投影做一个get

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) 
0

您也可以尝试使用匹配的情况下

val intData: Int = i match { 
    case Right(data) => data 
    case Left(ex) => throw new Exception() 
} 

在你的情况,如果你只是想扔在左情况异常的输出将是诠释总是如此。