수색…


비고

패턴 일치는 제공된 패턴에 따라 분기하는 프로세스입니다. 모든 패턴 일치는 switch 표현식 내에서 이루어지며 개별 case 표현식은 패턴을 나타냅니다.

패턴 일치의 기본 규칙은 다음과 같습니다.

  • 패턴은 항상 위에서 아래로 매치됩니다.
  • 입력 값과 일치하는 최상위 패턴은 표현식이 실행됩니다.
  • _ 패턴은 어떤 것과도 일치하므로 case _:default: .

가능한 모든 경우를 처리하는 경우, 캐치 - 모든 _ 패턴이나 default 케이스가 필요하지 않습니다.

열거 일치

다음 열거 형을 가정 해보십시오.

enum Operation {
    Multiply(left : Int, right : Int);
}

열거 형 일치는 다음과 같이 수행 할 수 있습니다.

var result = switch(Multiply(1, 3)) {
    case Multiply(_, 0):
        0;
    case Multiply(0, _):
        0;
    case Multiply(l, r):
        l * r;
}

참고 문헌

구조 일치

다음 구조를 가정합니다.

var dog = {
    name : "Woofer",
    age : 7
};

열거 형 일치는 다음과 같이 수행 할 수 있습니다.

var message = switch(dog) {
    case { name : "Woofer" }:
        "I know you, Woofer!";
    case _:
        "I don't know you, sorry!";
}

참고 문헌

배열 일치

var result = switch([1, 6]) {
    case [2, _]:
        "0";
    case [_, 6]:
        "1";
    case []:
        "2";
    case [_, _, _]:
        "3";
    case _:
        "4";
}

참고 문헌

또는 패턴

| 연산자는 패턴 내에서 어디에서나 사용할 수있어 여러 허용 패턴을 나타냅니다. or- 패턴에 캡처 된 변수가있는 경우 두 하위 패턴 모두에 나타나야합니다.

var match = switch(7) {
    case 4 | 1: "0";
    case 6 | 7: "1";
    case _: "2";
}

참고 문헌

근위 연대

가드를 사용하여 패턴을 더 제한 할 수도 있습니다. case ... if(condition): 구문에 의해 정의됩니다.

var myArray = [7, 6];
var s = switch(myArray) {
    case [a, b] if (b > a):
        b + ">" +a;
    case [a, b]:
        b + "<=" +a;
    case _: "found something else";
}

참고 문헌

추출기

추출기는 extractorExpression => match 표현식에 의해 식별됩니다. 추출기는 두 부분으로 구성되며 => 연산자로 구분됩니다.

  1. 왼쪽은 모든 표현식이 될 수 있습니다. 여기서는 _ 가있는 모든 __ 가 현재 일치하는 값으로 대체됩니다.
  2. 오른쪽은 왼쪽의 평가 결과와 일치하는 패턴입니다.

오른쪽은 패턴이므로 다른 추출기를 포함 할 수 있습니다. 다음 예제는 두 추출기를 "연결"합니다.

static public function main() {
    switch(3) {
        case add(_, 1) => mul(_, 3) => a:
            trace(a); // mul(add(3 + 1), 3)
    }
}

static function add(i1:Int, i2:Int) {
    return i1 + i2;
}

static function mul(i1:Int, i2:Int) {
    return i1 * i2;
}

현재 or-patterns 내에서 추출기를 사용할 수 없습니다. 그러나 추출기의 오른쪽에 or 패턴이있을 수 있습니다.

참고 문헌



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow