Elixier - Module
In Elixir gruppieren wir mehrere Funktionen in Module. In den vorherigen Kapiteln haben wir bereits verschiedene Module verwendet, z. B. das String-Modul, das Bitwise-Modul, das Tuple-Modul usw.
Um unsere eigenen Module in Elixir zu erstellen, verwenden wir die defmoduleMakro. Wir nehmen dasdef Makro zum Definieren von Funktionen in diesem Modul -
defmodule Math do
def sum(a, b) do
a + b
end
end
In den folgenden Abschnitten werden unsere Beispiele länger und es kann schwierig sein, sie alle in die Shell einzugeben. Wir müssen lernen, wie man Elixir-Code kompiliert und wie man Elixir-Skripte ausführt.
Zusammenstellung
Es ist immer bequem, Module in Dateien zu schreiben, damit sie kompiliert und wiederverwendet werden können. Nehmen wir an, wir haben eine Datei namens math.ex mit folgendem Inhalt:
defmodule Math do
def sum(a, b) do
a + b
end
end
Wir können die Dateien mit dem Befehl kompilieren -elixirc ::
$ elixirc math.ex
Dadurch wird eine Datei mit dem Namen generiert Elixir.Math.beamenthält den Bytecode für das definierte Modul. Wenn wir anfangeniexAuch hier ist unsere Moduldefinition verfügbar (vorausgesetzt, iex wird in demselben Verzeichnis gestartet, in dem sich die Bytecode-Datei befindet). Zum Beispiel,
IO.puts(Math.sum(1, 2))
Das obige Programm generiert das folgende Ergebnis:
3
Skriptmodus
Zusätzlich zur Elixir-Dateierweiterung .exElixir unterstützt auch .exsDateien für die Skripterstellung. Elixir behandelt beide Dateien genauso, der einzige Unterschied liegt im Ziel..ex Dateien sollen kompiliert werden, während .exs-Dateien für verwendet werden scripting. Bei der Ausführung kompilieren beide Erweiterungen ihre Module und laden sie in den Speicher, allerdings nur.ex Dateien schreiben ihren Bytecode im Format von .beam-Dateien auf die Festplatte.
Zum Beispiel, wenn wir das ausführen wollten Math.sum In derselben Datei können wir die EXE-Datei folgendermaßen verwenden:
Math.exs
defmodule Math do
def sum(a, b) do
a + b
end
end
IO.puts(Math.sum(1, 2))
Wir können es mit dem Elixir-Befehl ausführen -
$ elixir math.exs
Das obige Programm generiert das folgende Ergebnis:
3
Die Datei wird im Speicher kompiliert und ausgeführt, wobei als Ergebnis „3“ gedruckt wird. Es wird keine Bytecode-Datei erstellt.
Modulverschachtelung
Module können in Elixir verschachtelt werden. Diese Funktion der Sprache hilft uns, unseren Code besser zu organisieren. Um verschachtelte Module zu erstellen, verwenden wir die folgende Syntax:
defmodule Foo do
#Foo module code here
defmodule Bar do
#Bar module code here
end
end
Das oben angegebene Beispiel definiert zwei Module: Foo und Foo.Bar. Auf die zweite kann als zugegriffen werdenBar Innerhalb Foosolange sie sich im gleichen lexikalischen Bereich befinden. Wenn später dieBar Das Modul wird außerhalb der Foo-Moduldefinition verschoben. Es muss mit seinem vollständigen Namen (Foo.Bar) referenziert werden, oder ein Alias muss mithilfe der im Alias-Kapitel beschriebenen Alias-Direktive festgelegt werden.
Note- In Elixir muss das Foo-Modul nicht definiert werden, um das Foo.Bar-Modul zu definieren, da die Sprache alle Modulnamen in Atome übersetzt. Sie können beliebige Module definieren, ohne ein Modul in der Kette zu definieren. Zum Beispiel können Sie definierenFoo.Bar.Baz ohne zu definieren Foo oder Foo.Bar.