val addOptions = (o1: Option[Float], o2: Option[Float]) => (o1, o2) match {
case (Some(v1), Some(v2)) => Some(v1 + v2)
case (None, [email protected](_)) => v
case ([email protected](_), None) => v
case (None, None) => None
}
addOptions(Some(1.2f), None)
----
res3: Option[Float] = Some(1.2)
、またはオプションのを使用して::
val addOptions = (o1: Option[Float], o2: Option[Float]) =>
o1.fold(o2)(v1 => o2.fold(o1)(v2 => Some(v1 + v2)))
その後、あなたはまた、リストを折るときに関数を渡すことによって、n個の項目を追加することができタプルにパターンマッチングによってどちらか。
val lst = List[Option[Float]](Some(1.5f), None, Some(2f))
lst.foldLeft(None: Option[Float]) { (acc, item) =>
addOptions(acc, item)
}
あなたはまた、それのような
cats
ライブラリ(
https://github.com/typelevel/cats)か何かを使用することができ
:
import cats.implicits._
val a: Option[Float] = Some(2f)
val b: Option[Float] = Some(2f)
a |+| b
----
res2: Option[Float] = Some(4.0)
|+|
がちょうど半群のために(https://en.wikipedia.org/wiki/Semigroup)
有用であると思いますがhttps://stackoverflow.com/questionsを見てください/ 16319505/summing-up-two-options –
あなたの例では、結果を 'Option [Float]'ではなく単純な 'Float'として取得したいと思われます。その場合、最も簡単な解決策は 'f1.getOrElse(0f)+ f2.getOrElse(0f)' – Kolmar