10

メソッドが でget定義されているのに で定義されOptionていないのはなぜSomeですか?

パターン マッチングを適用するかforeachmap, flatMap,を使用することができます。これは、が呼び出されたgetOrElse場合に実行時例外の危険がなく、とにかく優先されます。None.get

getメソッドが非常に説得力があり、これを正当化する場合は本当にありますか? このgetメソッドを使用すると、「var が設定されていることがわかっているため、null をチェックする必要がない」という Java を思い出し、NullPointerException.

4

5 に答える 5

6

Option.get は、型システムによってキャプチャされないという推論によって、値が None ではないことがわかっている場合に役立つことがあります。ただし、次のことを試した場合にのみアクセスする必要があります。

  • この知識があなたのタイプによって表現されるように手配します。
  • 前述の Option 処理メソッド (flatMap、getOrElse など) を使用しますが、どれもエレガントに適合しません。

使い捨て/インタラクティブなコード (REPL、ワークシートなど) にも便利です。

于 2013-05-21T09:03:38.147 に答える
0

それには正当な理由はありません。Martin Odersky が 2007 年のこのコミットに追加したので、彼の動機を尋ねる必要があると思います。以前のバージョンにはgetOrElseセマンティクスがありました。

于 2013-05-21T08:23:48.603 に答える
0

場合によっては、あなたOptionが であることが判明したときに、頼りになるNone手段がなく、例外をスローしたい場合があります。だから、書く代わりに

myOption match {
  case Some(value) => // use value
  case None => throw new RuntimeException("I really needed that value")
}

あなたは単に書くことができます

myOption.get // might throw an exception

また、次のものと組み合わせて、Java から使用するのがOption はるかにisDefined便利になります。

if (myOption.isDefined()) process(myOption.get());
else // it's a None!
于 2013-05-22T04:26:43.700 に答える