옵션 값을 테스트하는 더 나은 방법?
-
05-07-2019 - |
문제
나는 종종 나 자신을 발견한다 Option[T]
어떤 유형의 경우 T
옵션의 값을 일부 값에 대해 테스트하고 싶습니다. 예를 들어:
val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes")
//do something
다음 코드는 동일하며 테스트 요구 사항을 제거합니다. 존재 옵션의 가치
if (opt.map(_ == "lakes").getOrElse(false))
//do something
그러나 이것은 나에게 읽기 어려운 것 같습니다. 다른 가능성은 다음과 같습니다.
if (opt.filter(_ == "lakes").isDefined)
if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
그러나 나는 이것이 더 나은 의도를 명확하게 표현한다고 생각하지 않습니다.
if (opt.isDefinedAnd(_ == "lakes"))
이 테스트를 수행하는 더 나은 방법이 있습니까?
해결책
어때
if (opt == Some("lakes"))
이것은 의도를 명확하게 표현하고 간단합니다.
다른 팁
Scala 2.11의 경우 사용할 수 있습니다 Some(foo).contains(bar)
Walter Chang FTW이지만 여기에 또 다른 어색한 대안이 있습니다.
Some(2) exists (_ == 2)
val opt = Some("oxbow")
opt match {
case Some("lakes") => //Doing something
case _ => //If it doesn't match
}
For-Congrension도 사용할 수 있습니다.
for {val v <- opt if v == "lakes"}
// do smth with v
패턴 매칭도 사용할 수 있다고 생각합니다. 그렇게하면 흥미로운 값을 직접 추출합니다.
val opt = Some("oxbow")
opt match {
case Some(value) => println(value) //Doing something
}
제휴하지 않습니다 StackOverflow