Elixier - Mustervergleich

Pattern Matching ist eine Technik, die Elixir von Erlang erbt. Es ist eine sehr leistungsfähige Technik, mit der wir einfachere Unterstrukturen aus komplizierten Datenstrukturen wie Listen, Tupeln, Karten usw. extrahieren können.

Ein Match besteht aus 2 Hauptteilen: a left und ein rightSeite. Die rechte Seite ist eine Datenstruktur jeglicher Art. Die linke Seite versucht, die Datenstruktur auf der rechten Seite anzupassen und alle Variablen auf der linken Seite an die jeweilige Unterstruktur auf der rechten Seite zu binden. Wird keine Übereinstimmung gefunden, gibt der Bediener einen Fehler aus.

Die einfachste Übereinstimmung ist eine einzelne Variable links und eine beliebige Datenstruktur rechts. This variable will match anything. Zum Beispiel,

x = 12
x = "Hello"
IO.puts(x)

Sie können Variablen innerhalb einer Struktur platzieren, um eine Unterstruktur zu erfassen. Zum Beispiel,

[var_1, _unused_var, var_2] = [{"First variable"}, 25, "Second variable" ]
IO.puts(var_1)
IO.puts(var_2)

Dadurch werden die Werte gespeichert. {"First variable"}in var_1 und"Second variable"in var_2 . Es gibt auch eine besondere_ Variable (oder Variablen mit dem Präfix '_'), die genau wie andere Variablen funktioniert, aber Elixier mitteilt, "Make sure something is here, but I don't care exactly what it is.". Im vorherigen Beispiel war _unused_var eine solche Variable.

Mit dieser Technik können wir kompliziertere Muster abgleichen. Zumexample Wenn Sie eine Zahl in einem Tupel auspacken und erhalten möchten, das sich in einer Liste befindet, die sich selbst in einer Liste befindet, können Sie den folgenden Befehl verwenden:

[_, [_, {a}]] = ["Random string", [:an_atom, {24}]]
IO.puts(a)

Das obige Programm generiert das folgende Ergebnis:

24

Dies wird binden a bis 24. Andere Werte werden ignoriert, da wir '_' verwenden.

Beim Pattern Matching, wenn wir eine Variable auf dem verwenden rightwird sein Wert verwendet. Wenn Sie den Wert einer Variablen auf der linken Seite verwenden möchten, müssen Sie den Pin-Operator verwenden.

Wenn Sie beispielsweise eine Variable "a" mit dem Wert 25 haben und diese mit einer anderen Variablen "b" mit dem Wert 25 abgleichen möchten, müssen Sie Folgendes eingeben:

a = 25
b = 25
^a = b

Die letzte Zeile entspricht dem aktuellen Wert von a, anstatt es dem Wert von zuzuweisen b. Wenn wir einen nicht übereinstimmenden Satz von linker und rechter Seite haben, löst der Übereinstimmungsoperator einen Fehler aus. Wenn wir beispielsweise versuchen, ein Tupel mit einer Liste oder eine Liste der Größe 2 mit einer Liste der Größe 3 abzugleichen, wird ein Fehler angezeigt.