オプションが与えられた場合、その値を取得したり例外をスローしたりする慣用的な方法は何ですか?
def foo() : String = {
val x : Option[String] = ...
x.getOrException()
}
オプションが与えられた場合、その値を取得したり例外をスローしたりする慣用的な方法は何ですか?
def foo() : String = {
val x : Option[String] = ...
x.getOrException()
}
「throw
ステートメント」は実際には Scala の式でNothing
あり、他のすべての型のサブタイプである type を持ちます。これは、単純な古いものをそのまま使用できることを意味しますgetOrElse
:
def myGet[A](oa: Option[A]) = oa.getOrElse(throw new RuntimeException("Can't."))
しかし、あなたは本当に、本当にこれをすべきではありません。
(編集: これは最善の、または最も慣用的な方法ではありません。Scala に慣れていないときに書いたものです。そうしない方法の例としてここに残します。現在は @TravisBrown として行います)
私はそれが本当に2つのことに要約されると思います:
コードのその時点で値が存在することを期待していて、リモートのケースではプログラムがすぐに失敗することを望んでいない場合、私は通常の処理のみを行い、値がない場合はget
Scala にスローさせます。 NoSuchElementException
:
def foo() : 文字列 = { val x : オプション[文字列] = ... x.get }
ケースを別の方法で処理したい場合 (独自の例外をスロー)、よりエレガントな方法は次のようになると思います。
def foo(): 文字列 = { val x: オプション[文字列] = なし ×マッチ{ case Some(値) => 値 case None => throw new MyRuntimeException("blah") } }
そしてもちろん、 が使用される場合に独自の代替値を提供したい場合は、Option
次のNone
ようにしますgetOrElse
。
def foo(): 文字列 = { val x: オプション[文字列] = なし x.getOrElse("私の代替値") }
.get メソッドを使用するだけです。
def get[T](o:Option[T]) = o.get
o が None のインスタンスである場合、NoSuchElementException がスローされます。
基本的に、次のようなオプションを使用します。
def addPrint(oi:Option[Int]) = oi.map(_+1).foreach(println)
addPrint(Some(41))
addPrint(Some(1336))
addPrint(None)
あなたの特定の質問を避けるために。