Zoeken…


Opmerkingen

Patroonafstemming is het vertakkingsproces afhankelijk van de verstrekte patronen. Alle patroonherkenning wordt uitgevoerd bij een switch expressie en individueel case uitdrukkingen geven de patronen.

De fundamentele regels voor het matchen van patronen zijn:

  • patronen worden altijd van boven naar beneden gematcht;
  • de expressie wordt uitgevoerd op het bovenste patroon dat overeenkomt met de invoerwaarde;
  • een _ patroon komt met alles overeen, dus case _: is gelijk aan default:

Wanneer alle mogelijke gevallen worden afgehandeld, is het verzamelpatroon _ of default niet vereist.

Enum matching

Ga uit van de volgende opsomming:

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

Enum-matching kan als volgt worden uitgevoerd:

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

Referenties

Structuuraanpassing

Ga uit van de volgende structuur:

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

Enum-matching kan als volgt worden uitgevoerd:

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

Referenties

Array matching

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

Referenties

Of patronen

De | operator kan overal in patronen worden gebruikt om meerdere geaccepteerde patronen te beschrijven. Als er een vastgelegde variabele in een of-patroon is, moet deze in beide subpatronen verschijnen.

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

Referenties

Guards

Het is ook mogelijk om patronen met bewakers verder te beperken. Deze worden bepaald door het case ... if(condition): syntaxis.

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";
}

Referenties

extractors

Extractoren worden geïdentificeerd door de extractorExpression => match expressie. Extractoren bestaan uit twee delen, die worden gescheiden door de operator => .

  1. De linkerkant kan elke expressie zijn, waarbij alle onderstrepingstekens _ worden vervangen door de momenteel overeenkomende waarde.
  2. De rechterkant is een patroon dat wordt vergeleken met het resultaat van de evaluatie van de linkerkant.

Aangezien de rechterkant een patroon is, kan deze een andere extractor bevatten. Het volgende voorbeeld "ketent" twee extractors:

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;
}

Het is momenteel niet mogelijk om extractors in of-patronen te gebruiken. Het is echter mogelijk om or-patronen aan de rechterkant van een extractor te hebben.

Referenties



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow