스칼라 패턴 매칭
스칼라기구 일치 강력한 패턴이 또한 널리 이용되고 제공한다.
매칭 패턴은키워드의 경우 시작 각각의 대안의 시리즈를 포함하고 있습니다.각각의 백업 옵션과 표현의 복수의 패턴을 포함하고 있습니다. 화살표 기호=>는 패턴과 표현을 분리한다.
다음은 단순한 패턴 매칭 정수 값의 예이다 :
object Test { def main(args: Array[String]) { println(matchTest(3)) } def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } }
위의 코드의 구현, 출력은 :
$ scalac Test.scala $ scala Test many
스위치에 대응하는 자바 일치하지만, 선택 식 기록 후에.즉 : 선택기 일치 {대안}.
그들이 일치하는 경우는 사건의 나머지 부분은 계속되지 않습니다 일치가 발견되면, 계산을 완료하기 위해 각 모드를 사용해 작성된 코드와 일치하는 식의 주문.
다음에 우리는 패턴 매칭의 다른 데이터 형식을 보면 :
object Test { def main(args: Array[String]) { println(matchTest("two")) println(matchTest("test")) println(matchTest(1)) println(matchTest(6)) } def matchTest(x: Any): Any = x match { case 1 => "one" case "two" => 2 case y: Int => "scala.Int" case _ => "many" } }
위의 코드의 구현, 출력은 :
$ scalac Test.scala $ scala Test 2 many one scala.Int
제 1 케이스의 실시 예 1의 정수 값에 해당하고, 두 번째 경우는 두 가지의 문자열 값에 해당하고, 두 번째 경우는 두 가지의 문자열 값에 대응하고, 세 번째 경우는 값이 전부 통과했는지 여부를 결정하기 위해 사용되는 모델의 종류에 대응 유형, isInstanceOf 유형을 결정하기 위해 비교 사용하여 패턴 매칭이 좋다. 네 번째 경우는 그 경기는 다른 경기, 기본에서 유사한 스위치에서 발견되지 않는 기본 전체 경기의 대안을 나타냅니다.
샘플 클래스를 사용하여
클래스 정의 키워드 케이스 샘플 클래스 (케이스 클래스)이다 사용하여 샘플 클래스는 패턴 매칭을위한 최적화 된 특별 클래스이다.
다음은 샘플 클래스의 간단한 예이다 :
object Test { def main(args: Array[String]) { val alice = new Person("Alice", 25) val bob = new Person("Bob", 32) val charlie = new Person("Charlie", 32) for (person <- List(alice, bob, charlie)) { person match { case Person("Alice", 25) => println("Hi Alice!") case Person("Bob", 32) => println("Hi Bob!") case Person(name, age) => println("Age: " + age + " year, name: " + name + "?") } } } // 样例类 case class Person(name: String, age: Int) }
위의 코드의 구현, 출력은 :
$ scalac Test.scala $ scala Test Hi Alice! Hi Bob! Age: 32 year, name: Charlie?
당신은 클래스의 예를 선언 할 때, 다음과 같은 절차가 자동으로 발생합니다
- 명시 적으로 VAR로 선언하지 않는 한 각 매개 변수 생성자, 발되고있다,하지만 권장하지 않습니다;
- 새 키워드를 사용할 수 없습니다 객체를 구축 할 수 있도록 방법을 관련 개체를 적용하는 단계;
- 제공 적용 취소 방법은 패턴 매칭 작업 할 수 있습니다;
- , toString는, 동일 생성 해시 코드와 디스플레이가 이러한 방법에 대한 정의를 표시하지 않는 방법을 복사합니다.