2012-08-17 2 views
5

각각 앞에 동일한 가드가있는 많은 수의 구문을 사용하고 싶습니다. 코드 복제가 필요없는 방식으로 처리 할 수 ​​있습니까?스칼라 패턴이 기본 가드와 일치합니다.

class If { 
    def unapply(s: Any) = if (variable) Some(s) else None 
} 
object If extends If 
"something" match { 
    case If("a") => println("a") 
    case If("b") => println("b") 
    // ... 
} 
+1

코드를 분기로 분할 할 수 있습니까? "변수 일 경우"를 꺼내서 안으로 들어갔다면, 다른 지점들도 마찬가지입니다. – aishwarya

답변

8

당신은 추출기를 만들 수 있습니다 좋은거야. 또는 "변수"와 먼저 일치시킬 수 있습니다.

variable match { 
    case true => s match { 
    case "a" | "b" | "c" => true 
    case _ => false 
    } 
    case _ => false 
} 
7

OR (파이프) 연산자는 가드보다 더 높은 우선 순위를 가지고 있습니다 것 같다, 그래서 다음 작품 :

def test(s: String, v: Boolean) = s match { 
    case "a" | "b" if v => true 
    case _ => false 
} 

assert(!test("a", false)) 
assert(test("a", true)) 
assert(!test("b", false)) 
assert(test("b", true)) 
4

0 __의 대답

"something" match { 
    case "a" if(variable) => println("a") 
    case "b" if(variable) => println("b") 
    // ... 
} 
관련 문제