2016-11-24 8 views
1

私はスカラの初心者です。私はそれと一緒に弾いている。 コードベースの下のピースで変数iからInt型を取得する方法。スカラーのいずれかのクラスからInt型を取得するには?

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

基本的には、以下のようなものが必要です。

ヴァルます。int = I

+0

「e」が「左」の場合はどうしますか? –

+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 

しかし、多くの慣用的なアプローチがEitherfoldにあります。

val r3: Int = i.a.fold(l => -1, identity) 

もちろん、デフォルト値を提供する代わりに例外を再スローしたい場合は、代わりにそれを実行できます。

val r4: Int = i.a.fold(l => throw l, identity) 
0

また、あなただけの出力は常にのIntになり、左の場合に例外をスローする場合、あなたのケースでは、マッチケース

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

を使用して試すことができます。

関連する問題