문제

나는 종종 나 자신을 발견한다 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
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top