2013-11-26 2 views
0

내가 할 수있는 값을 테스트하기 위해 일치 식을 사용하고 있습니다 또는 다음과 같이 Map 객체에 있지 않을 수 있습니다 말 코드 중복을 피하고 두 경우 모두 내 키 값을 가지고 있으며 조건 2를 충족하거나 키 값이 없습니다. 누구든지 위의 예제에서 res2()에 대한 중복 호출을 피할 수있는 더 나은 구조를 제안 할 수 있습니까?스칼라 일치 식

감사 데

* 죄송합니다 나는 코드 샘플은 아주 정확하지이었고, 그에 따라 업데이트 한 것을 깨달았다. 키에 대한 값이 cond2와 일치하거나 키에 대한 항목이없는 경우에만 res2를 호출하려고합니다. key의 종류가 무엇이든 함께 [String] 교체

map.get(key) match { 
    case Some(value) if (cond1(value)) => res1(value) 
    case o: Option[String] if (o.forall(cond2)) => res2() 
    case _ => 
} 

:

case Some(value) => if (cond1(value)) res1(value) else res2() 

답변

0

는 경우에만 가능성이 있습니다.

Option의 메서드 이름이 항상 가장 명확한 것은 아닙니다. 기능적인 순결을 유지함에있어서 우리는 문맹률을 희생합니다. 이 옵션이 비어 있거나이 scala.Option의 값에 적용 할 때 술어 p가 true를 돌려주는 경우

true를 반환 :이 경우, scaladoc for Option은 우리에게 그 FORALL을 알려줍니다.

1

무엇을 믿는 당신이 원하는 것은 : 가르없이

+1

OP가 'cond2'의 부작용을 기대하지 않는 경우 가장 좋은 대답입니다. 그럴 필요가 없습니다. – yan

+0

OP는 그의 질문을 업데이트했고이 대답을 무효로 만들었습니다 :'key'와 관련된 값이'cond2'와 일치하거나'key'와 연관된 값이 없다면'res2()'를 호출하려고합니다. 이 응답은'key1 '과'cond2'가 일치하지 않는 값이 있다면 그것을 호출 할 것입니다. –

+0

@ user79074 업데이트 된 질문과 일치하도록 답변 됨. –