val
、condition
、option
の2つがあります。 condition
は、オプションの値に依存しない単純なブール値であることに注意してください。Idiomatic Scala:条件に応じたマッピングオーバーオプション
condition
が成立する場合は、結果値に変換するオプションをマップしたいと思います。それ以外の場合はdefaultResult
を返信したいと思います。
これは動作し、非常に読みやすいですが、私はdefaultResult
の重複を嫌い:
val result = if (condition) {
option.map(valueToResult).getOrElse(defaultResult)
} else {
defaultResult
}
私の第二のアプローチは、重複を持っていませんが、私は、フィルタが実際に依存しない何かのために虐待を受けているという事実を嫌いますオプションの値について:
val result = option.filter(_ => condition).map(valueToResult).getOrElse(defaultResult)
スカラーでもっと慣れ親しんだり、そうでなければより良いアプローチは何ですか?
は、なぜあなたは 'filter'が虐待を受けていると感じていますか? 'Option [T]'の根底にある値と関係のない外部の値に基づいたフィルタリングなのですか? "基本的な' Option [T] 'のプロパティをフィルタリングするためだけに' filter'を使うという規則はありません。 "私は2番目に行くだろう。 –
正確に。私は規則がないことを知っています、それは単なる個人的な(味の)味です。 – netzwerg
私はあなたが何を意味するかを見ます。私はその気持ちを時々感じます。可能な代替ソリューションについては私の答えを参照してください。 –