私はスカラの初心者です。私はそれと一緒に弾いている。 コードベースの下のピースで変数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
私はスカラの初心者です。私はそれと一緒に弾いている。 コードベースの下のピースで変数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
ストレートフォワードな方法は、Right
投影にget
を実行しています。
val r1: Int = i.a.right.get
しかしEither
がLeft
であれば、それは実行時例外がスローされますので、それは安全ではありません。
安全性をテストし、デフォルト値を指定できます。
val r2: Int = if (i.a.isRight) i.a.right.get else -1
しかし、多くの慣用的なアプローチがEither
上fold
にあります。
val r3: Int = i.a.fold(l => -1, identity)
もちろん、デフォルト値を提供する代わりに例外を再スローしたい場合は、代わりにそれを実行できます。
val r4: Int = i.a.fold(l => throw l, identity)
また、あなただけの出力は常にのIntになり、左の場合に例外をスローする場合、あなたのケースでは、マッチケース
val intData: Int = i match {
case Right(data) => data
case Left(ex) => throw new Exception()
}
を使用して試すことができます。
「e」が「左」の場合はどうしますか? –
エラーを無視またはスローします。私はちょうどIntの部分を取得し、それを変数に代入したい。 – Akash