복붙노트

[SCALA] 어떻게 | 패턴 매칭 작품 (파이프)?

SCALA

어떻게 | 패턴 매칭 작품 (파이프)?

당신은 쓸 수 있습니다:

str match { case "foo" | "bar" => ... }

| 얼핏보기에 그것은처럼 보인다 그러나, 추출 객체가 될 수있다 :

str match { case |("foo", "bar") => ... }

작동하지 않습니다. (그리고 나는 어쨌든 구현 될 수있는 방법을 볼 수 없습니다.)

그래서 내장 연산자 마법은?

(... 내가 SO 이전에이 질문을 보았다 생각하지만, 그것은 검색 불가능)

해결법

  1. ==============================

    1.예 파이프 (|)는 내장 된 패턴 매칭 (스칼라 언어 참조 참조). 패턴 매칭 섹션 (섹션 8) 패턴 대안을 소위 섹션 8.1.11에 정의합니다. 정의는 말한다 :

    예 파이프 (|)는 내장 된 패턴 매칭 (스칼라 언어 참조 참조). 패턴 매칭 섹션 (섹션 8) 패턴 대안을 소위 섹션 8.1.11에 정의합니다. 정의는 말한다 :

    그래서 그래, 파이프가 내장 그 패턴 매칭에 민감한 상황입니다.

  2. ==============================

    2.| 라이브러리에 구현되지 않은, 그것은 스칼라 컴파일러에 의해 해석됩니다. 즉, 당신은 같은 물건을 쓸 수 있습니다, 그것은 새로 형성된 패턴 자체가 바인딩 될 수 있지만 (모든 변수를 결합하지 않는 두 개의 서브 패턴 사이의 분리로 정의 된 새로운 패턴을 구축

    | 라이브러리에 구현되지 않은, 그것은 스칼라 컴파일러에 의해 해석됩니다. 즉, 당신은 같은 물건을 쓸 수 있습니다, 그것은 새로 형성된 패턴 자체가 바인딩 될 수 있지만 (모든 변수를 결합하지 않는 두 개의 서브 패턴 사이의 분리로 정의 된 새로운 패턴을 구축

    try { /*...*/ }
    catch {
      case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
    }
    

    및 e)는 열거 된 대안의 대부분 특정의 슈퍼 유형으로 가져옵니다.

  3. from https://stackoverflow.com/questions/6484137/how-does-pipe-in-pattern-matching-work by cc-by-sa and MIT license