1. ホーム
  2. scala

オプションの値を取得するか,例外を投げる

2023-08-07 23:02:15

質問

Optionが与えられたとき、その値を取得したり、例外をスローしたりするためのイディオム的な方法は何ですか?

def foo() : String = {
  val x : Option[String] = ...
  x.getOrException()
}

どのように解決するのですか?

(編集: この方法はベストでもイディオムでもありません。私はScalaに精通していないときにこれを書きました。私はそれをここに残して、どのように ではなく を行う方法の例としてここに残しておきます。今なら@TravisBrownのようにします)

本当に2つのことに集約されると思います。

  • どのように 確か がそこにあると確信していますか?
  • どのように 反応する でない場合は?

もし、あなたのコードのその時点で を期待します。 を期待し、そうでない場合はプログラムに 失敗 を速くしたいのであれば、私は通常の get を投げて、Scalaに NoSuchElementException を投げるようにします。

def foo() : 文字列 = {
  val x : Option[String] = ...
  x.get
}

もし、このケースを別の方法で処理したい(独自の例外を投げる)なら、よりエレガントな方法は次のようになると思います。

def foo(): 文字列 = {
  val x: Option[String] = None
  xのマッチング
    ケース Some(value) => value
    case None => throw new MyRuntimeException("blah")
  }
} 

そしてもちろん、もしあなたが OptionNone を使用する場合、単に getOrElse :

def foo(): 文字列 = {
  val x: オプション[String] = None
  x.getOrElse("私の代替値")
}