2016-03-31 13 views
-2

私はこのようなことをしたい。ScalaのOptionをOptionに変換する

if (x > 0) { 
    Some(123) 
} else { 
    None 
} 

短い方が次のようになります。

Try(x > 0).toOption.map(_ => 123) 

私は条件をチェックするため(例外をキャッチするように設計されている)Tryを使用することが少し不自然に思えます。これを達成する他の方法はありますか?

編集:xが負の場合x > 0が例外をスローしませんので、

Tryは動作しません。 Option

+6

実際には、val y = if(x> 0)と言っても問題ありません。(123)else None –

+1

あなたの 'Try'メソッドは動作していません。私は 'Try(true)'または 'Try(false)'と同じ結果を得ます。 – jwvh

+0

@jwvh悪いです。私は説明を更新します。ありがとう。 – Shouichi

答えて

3
Some(x).filter(_ > 0).map(_ => 123) 

あなたはfiltermapを使用することができます。

+0

良い答え。しかし、Scalaは部分関数型を推論することができないので、代わりに(より一般的な)アプローチは、 'PartialFunction':' {{Case x if x> 0 => 123}:PartialFunction [Int、Int])。lift'ですそれは便利ではありません。 – Aivean

+8

これはまだ 'Option(123).filter(_ => x> 0) 'となるでしょう。 –

+0

これは' if'よりも明確ではありませんが、完全性のために 'for {o < - Some(123); x> 0の場合は –

関連する問題