나는 이런 부울입니다 및 이를 방지하기 위한 패턴:
if (myBool)
Option(someResult)
else
None
myBool.toOption(someResult)
제안 사항을 수신기마다 코드 예는 고맙군.
[불라노프스트롭션] [1] 스칼라스 함께 할 수 있는 방법이 있다. 쓸 수 있다고 말했다.
myBool.option(someResult)
implicit class RichBoolean(val b: Boolean) extends AnyVal {
final def option[A](a: => A): Option[A] = if (b) Some(a) else None
}
스칼라 시작 '2.13', '옵션' 는 ['때'] (https://www.scala-lang.org/api/2.13.x/scala/Option) $ .html # 때 [A] (조건: 부울입니다) (a: = %3ea) 옵션 [A]) 이 구축자용 정확한 목적:
Option.when(condition)(result)
예를 들면 다음과 같습니다.
Option.when(true)(3)
// Option[Int] = Some(3)
Option.when(false)(3)
// Option[Int] = None
또한 ['루티언스운리스'] (https://www.scala-lang.org/api/2.13.x/scala/Option) $ .html # 않으면 [A] (조건: 부울입니다) (a: = %3ea) 옵션 [A]) 가 반대 찼음을 올립니다.
옵션 () () 는 이러한 형태의 패턴화합니다 스콜레스 좋은 일이다.
Option(myBool).collect { case true => someResult }
&solarisdvd 복제.
scala> (Option(true).collect { case true => 3 }, Option(false).collect { case true => 3 })
res3: (Option[Int], Option[Int]) = (Some(3),None)
다른 어떤 답을 질문에 대답 이다! 지정한 정확한 시맨틱스를 얻을 수 있습니다.
implicit class BoolToOption(val self: Boolean) extends AnyVal {
def toOption[A](value: => A): Option[A] =
if (self) Some(value) else None
}
그런 다음 쓰기
myBool.toOption(someResult)
예:
scala> true.toOption("hi")
res5: Option[String] = Some(hi)
scala> false.toOption("hi")
res6: Option[String] = None
class RichBool[T](a: Boolean, res:=> T) {
def toOption: Option[T] = if (a) Some(res) else None
}
implicit def boolToRichBool[T](tp: (Boolean, T)): RichBool[T] = new RichBool(tp._1, tp._2);
이는 제공하십시오:
(true, 5).toOption // Some(5);
(false, 3).toOption // None