Elixier - Verständnis

Listenverständnisse sind syntaktischer Zucker zum Durchlaufen von Aufzählungen in Elixir. In diesem Kapitel werden wir Verständnis für die Iteration und Generierung verwenden.

Grundlagen

Als wir uns das Enum-Modul im Kapitel Enumerables angesehen haben, sind wir auf die Map-Funktion gestoßen.

Enum.map(1..3, &(&1 * 2))

In diesem Beispiel übergeben wir eine Funktion als zweites Argument. Jedes Element im Bereich wird an die Funktion übergeben, und anschließend wird eine neue Liste mit den neuen Werten zurückgegeben.

Mapping, Filtern und Transformieren sind in Elixir sehr häufig. Daher gibt es eine etwas andere Möglichkeit, das gleiche Ergebnis wie im vorherigen Beispiel zu erzielen.

for n <- 1..3, do: n * 2

Wenn wir den obigen Code ausführen, wird das folgende Ergebnis erzeugt:

[2, 4, 6]

Das zweite Beispiel ist ein Verständnis, und wie Sie wahrscheinlich sehen können, ist es einfach syntaktischer Zucker für das, was Sie auch erreichen können, wenn Sie das verwenden Enum.mapFunktion. Die Verwendung eines Verständnisses gegenüber einer Funktion aus dem Enum-Modul in Bezug auf die Leistung bietet jedoch keine wirklichen Vorteile.

Das Verständnis ist nicht auf Listen beschränkt, sondern kann mit allen Aufzählungen verwendet werden.

Filter

Sie können sich Filter als eine Art Schutz für das Verständnis vorstellen. Wenn ein gefilterter Wert zurückgegeben wirdfalse oder niles ist von der endgültigen Liste ausgeschlossen. Lassen Sie uns einen Bereich durchlaufen und uns nur um gerade Zahlen kümmern. Wir werden die verwendenis_even Funktion aus dem Integer-Modul, um zu überprüfen, ob ein Wert gerade ist oder nicht.

import Integer
IO.puts(for x <- 1..10, is_even(x), do: x)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

[2, 4, 6, 8, 10]

Wir können auch mehrere Filter im gleichen Verständnis verwenden. Fügen Sie nach dem einen weiteren gewünschten Filter hinzuis_even Filter durch Komma getrennt.

: in Option

In den obigen Beispielen gaben alle Verständnisse Listen als Ergebnis zurück. Das Ergebnis eines Verständnisses kann jedoch durch Übergeben der in verschiedene Datenstrukturen eingefügt werden:into Option zum Verständnis.

Zum Beispiel a bitstring Der Generator kann mit der Option: into verwendet werden, um alle Leerzeichen in einer Zeichenfolge einfach zu entfernen.

IO.puts(for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>)

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

helloworld

Der obige Code entfernt alle Leerzeichen aus der Zeichenfolge mit c != ?\s filtern und dann mit der Option: in alle zurückgegebenen Zeichen in eine Zeichenfolge einfügen.