我是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 =我
我是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 =我
的直接的方式是在Right
投影做一个get
。
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)
您也可以尝试使用匹配的情况下
val intData: Int = i match {
case Right(data) => data
case Left(ex) => throw new Exception()
}
在你的情况,如果你只是想扔在左情况异常的输出将是诠释总是如此。
如果'e'是'Left',你想要发生什么? –
忽略或抛出错误。我只想检索Int部分并将其分配给一个变量。 – Akash