Buscar..


Observaciones

La coincidencia de patrones es el proceso de ramificación en función de los patrones proporcionados. Toda la coincidencia de patrones se realiza dentro de una expresión de switch , y las expresiones de case individuales representan los patrones.

Las reglas fundamentales de la coincidencia de patrones son:

  • los patrones siempre se combinarán de arriba a abajo;
  • el patrón superior que coincide con el valor de entrada tiene su expresión ejecutada;
  • un patrón _ coincide con cualquier cosa, por lo que el case _: es igual al default:

Cuando se manejan todos los casos posibles, todas incidental de _ patrón o default no se requiere el caso.

Enumeración coincidente

Supongamos la siguiente enumeración:

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

La asignación de enumeración se puede realizar de la siguiente manera:

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

Referencias

Coincidencia de estructuras

Supongamos la siguiente estructura:

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

La asignación de enumeración se puede realizar de la siguiente manera:

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

Referencias

Juego de matrices

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

Referencias

O patrones

El | El operador puede usarse en cualquier lugar dentro de los patrones para describir múltiples patrones aceptados. Si hay una variable capturada en un o-patrón, debe aparecer en ambos sub-patrones.

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

Referencias

Guardias

También es posible restringir aún más los patrones con guardias. Estos están definidos por el case ... if(condition): sintaxis.

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

Referencias

Extractores

Los extractores se identifican por extractorExpression => match expresión extractorExpression => match . Los extractores constan de dos partes, que están separadas por el operador => .

  1. El lado izquierdo puede ser cualquier expresión, donde todas las apariciones del guión bajo _ se reemplazan con el valor coincidente actual.
  2. El lado derecho es un patrón que se compara con el resultado de la evaluación del lado izquierdo.

Como el lado derecho es un patrón, puede contener otro extractor. El siguiente ejemplo "encadena" dos extractores:

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

Actualmente no es posible utilizar extractores dentro de o-patrones. Sin embargo, es posible tener o-patrones en el lado derecho de un extractor.

Referencias



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow