31

この一般的なパターンは少し冗長に感じます。

if (condition) 
  Some(result)
else None

簡単にするために関数を使用することを考えていました:

def on[A](cond: Boolean)(f: => A) = if (cond) Some(f) else None

これにより、上の例は次のようになります。

on (condition) { result }

このようなものはすでに存在しますか?それともこれはやり過ぎですか?

4

7 に答える 7

27

最初のものを作成Optionし、条件でそれをフィルタリングできます。

Option(result).filter(condition)

またはcondition関連していない場合result

Option(result).filter(_ => condition)
于 2012-10-04T13:51:43.473 に答える
18

Scalazにはオプション関数が含まれています。

import scalaz.syntax.std.boolean._

true.option("foo") // Some("foo")
false.option("bar") // None
于 2012-10-04T13:56:32.000 に答える
4

PartialFunctionコンパニオン オブジェクトとを使用できますcondOpt

PartialFunction.condOpt(condition) {case true => result}

使用法:

 scala> PartialFunction.condOpt(false) {case true => 42}
 res0: Option[Int] = None

 scala> PartialFunction.condOpt(true) {case true => 42}
 res1: Option[Int] = Some(42)
于 2012-10-04T13:55:38.630 に答える
2
import scalaz._, Scalaz._
val r = (1 == 2) ? Some(f) | None
System.out.println("Res = " + r)
于 2012-10-04T13:57:38.320 に答える