Scala 에서는 Pattern matching 을 할경우, 특수 문자들을 사용하여 수행할 수 있다.
허용되는 특수문자는 @, _, * 들이 있다.
1. "_" : "_" 는 어떠한 것과도 매칭될 수 있는 와일드카드 키워드이다.
예제: 아래에서는 matchChoice 함수에 어떠한 숫자도 입력할 수 있지만, 0 과 1을 제외한 다른 수를 입력하면 Other choices 라는 메시지를 출력한다.
def matchChoice(num: Int) = { num match { case 0 => println("Choice is zero") case 1 => println("Choice is one") case _ => println("Other choices") } } |
2. "@" : "@" 는 특정 패턴이나 패턴의 부분에 붙이는 별칭이다.
아래의 예제는 스칼라 인터프리터에서 패턴매칭을 하는 것을 보여준다.
scala> case class Address(code: Int, zip: Int, city: String, nation: String) defined class Address
scala> val country1 = Address(1,1,"Seoul", "Korea") country1: Address = Address(1,1,Seoul,Korea)
scala> val country2 = Address(2,2,"Beijing", "China") country2: Address = Address(2,2,Beijing,China)
scala> val country3 = Address(3,3,"Tokyo", "Japan") country3: Address = Address(3,3,Tokyo,Japan)
scala> val country4 = Address(4,4,"Seoul", "Korea") country4: Address = Address(4,4,Seoul,Korea)
scala> val countries = List(country1, country2, country3, country4) countries: List[Address] = List(Address(1,1,Seoul,Korea), Address(2,2,Beijing,China), Address(3,3,Tokyo,Japan), Address(4,4,Seoul,Korea))
아래 파란색 부분은 각 나라에 따라서 주소를 출력하는 코드이다. case address @ Address(_, _, "Seoul", "Korea") => println(address.toString) 구문에서 Address case class 의 객체를 address 라는 별칭으로 대신 사용할 수 있다. scala> for (country <- countries) { | country match { | case address @ Address(_,_,"Seoul", "Korea") => println(address.toString) | case _ => println("Other country") | } | } Address(1,1,Seoul,Korea) Other country Other country Address(4,4,Seoul,Korea) |
3. "_*" : sequence 들을 매칭할 때 사용하는데, 0개 이상의 요소를 가진 sequence 를 요소의 끝까지 매칭시킨다.
아래 구문은 expr 이라는 변수를 패턴매칭 하는 코드이다.
첫 번째 패턴 매칭은 expr 이 List 타입이고, 첫 번째 요소가 1이며, 총 3개의 요소를 가질경우 해당하는 것이고.
두 번째 패턴 매칭은 expr 이 List 타입이고, 0개 혹은 그 이상의 요소를 가질 경우를 의미한다.
세 번째 패턴 매칭은 expr 이 Map 타입이고, (key, value) pair 가 어떤 값이든 상관 없는 경우를 의미한다.
그러므로, 두 번째 패턴 매칭이 첫 번째 패턴매칭보다 먼저오면 첫 번째 패턴 매칭은 수행되지 않는다.
expr match { case List(1,_,_) => " a list with three element and the first element is 1" case List(_*) => " a list with zero or more elements " case Map[_,_] => " matches a map with any key type and any value type " case _ => } |
'Programming > Scala' 카테고리의 다른 글
Scala - Application (Scala 언어 응용프로그램) (0) | 2011.11.10 |
---|---|
Scala - Implement rational number (Scala 언어로 유리수 구현) (0) | 2011.11.10 |
Scala - Creating IntelliJ Scala project using sbt (sbt 를 이용하여 IntelliJ 용 Scala project 생성하기) (0) | 2011.11.10 |
Scala - Basic calculator using Parser Combinator (스칼라 언어로 만드는 간단한 사칙 연산 계산기 프로그램) (0) | 2011.11.10 |
Scala - Pattern matching (0) | 2011.11.10 |