문제

다음과 같이 스칼라의 여러 Option 중 하나의 값을 얻고 싶습니다.

def or(a:Option[Int], b:Option[Int]):Option[Int]=
    if (a.isDefined) a else b

val a= Option(1)
val b= Option(2)
or(a,b).get

하지만 왜 그렇지 않은지 궁금합니다. || Option에 대해 연산자가 정의되어 있습니까?이 작업을 수행하는 더 관용적인 방법이 있습니까?

도움이 되었습니까?

해결책

오렐을 사용하십시오.

scala> Some(1) orElse Some(2)
res0: Option[Int] = Some(1)

scala> (None: Option[Int]) orElse Some(2)
res1: Option[Int] = Some(2)
.

다른 팁

Scalaz 7을 사용하면 Tags.First 모노이드를 사용할 수 있습니다.

[info] Starting scala interpreter...
[info] 
import scalaz._
import Scalaz._
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala> Tags.First('a'.some) |+| Tags.First('b'.some)
res0: scalaz.@@[Option[Char],scalaz.Tags.First] = Some(a)

scala> Tags.First(none[Char]) |+| Tags.First('b'.some)
res1: scalaz.@@[Option[Char],scalaz.Tags.First] = Some(b)

scala> Tags.First('a'.some) |+| Tags.First(none[Char])
res2: scalaz.@@[Option[Char],scalaz.Tags.First] = Some(a)
.

옵션으로

orElse를 사용하십시오.

val a = None
val b = Some("b")

a orElse b
.

일부 ( "b")를 반환합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top