Ответ 1
Scalaz включает функцию option
import scalaz.syntax.std.boolean._
true.option("foo") // Some("foo")
false.option("bar") // None
Этот общий шаблон выглядит немного подробным:
if (condition)
Some(result)
else None
Я думал об использовании функции для упрощения:
def on[A](cond: Boolean)(f: => A) = if (cond) Some(f) else None
Это уменьшает верхний пример до:
on (condition) { result }
Что-то вроде этого уже существует? Или это перебор?
Scalaz включает функцию option
import scalaz.syntax.std.boolean._
true.option("foo") // Some("foo")
false.option("bar") // None
Сначала вы можете создать Option
и фильтровать его с помощью вашего условия:
Option(result).filter(condition)
или если condition
не связано с result
Option(result).filter(_ => condition)
Вы можете использовать сопутствующий объект 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)
import scalaz._, Scalaz._
val r = (1 == 2) ? Some(f) | None
System.out.println("Res = " + r)
Вот еще один простой подход:
Option(condition).collect{ case true => result }
Простой пример:
scala> val enable = true
enable: Boolean = true
scala> Option(enable).collect{case true => "Yeah"}
res0: Option[String] = Some(Yeah)
scala> Option(!enable).collect{case true => "Yeah"}
res1: Option[String] = None
Здесь приведены некоторые расширенные небулевые примеры, которые ставят условие в соответствие шаблону:
val param = "beta"
Option(param).collect{case "alpha" => "first"} // gives None
Option(param).collect{case "alpha" => "first"
case "beta" => "second"
case "gamma" => "third"} // gives Some(second)
val number = 999
Option(number).collect{case 0 => "zero"
case x if x > 10 => "too high"} // gives Some(too high)