2017-12-16 4 views
0

주어진 문자열을 주어진 다른 문자열 집합과 비교하려고합니다. 대신에 나는 직관적으로보다 간결 패턴 매칭 방법을 가서, if s의 시리즈를 사용 썼다 :(패턴)이 스칼라에서 문자열과 일치합니다

val s = "match" 

val s1 = "not match" 
val s2 = "not really a match" 
val s3 = "match" 

s match { 
    case s1 => println("Incorrect match 1") 
    case s2 => println("Incorrect match 2") 
    case s3 => println("Match") 
    case _ => println("Another incorrect match") 
} 

놀라 울 정도로 나에게, 결과 어떤 :

Incorrect match 1 

그리고 내 컴파일러 경고가 넘어서 case s2 =>... 내 코드에 도달 할 수 없습니다. 내 접근 방식이 효과가없는 이유는 무엇입니까? 그리고 문자열에 "일치"시킬 수 있습니까?

+0

S3 당신이 필요합니까 패턴 일치? – Martijn

+0

예, 문제가 간소화되도록 예제가 단순화되었습니다. – parazs

답변

2

에서 패턴 일치와이 소문자 변수 스칼라,이 새로운 임시 변수의 생각됩니다. 이로 인해 코드가 Incorrect match 1으로 출력됩니다. 그래서 당신처럼, 자신의 가치를 일치하도록 변수를 인코딩하기 위해 identifier를 사용할 수 있습니다

s match { 
    case `s1` => println("Incorrect match 1") 
    case `s2` => println("Incorrect match 2") 
    case `s3` => println("Match") 

또는 당신이 좋아, 대문자에 변수 이름을 업데이트 할 수 있습니다 S1, S2,

관련 문제