Um Code zwischen verschiedenen Elixir-Modulen innerhalb desselben Projekts zu teilen, musst du auf das externe Modul mit seinem vollständigen Namen verweisen. Aber was, wenn dieser Name zu lang oder verwirrend ist?
Die spezielle Form alias ermöglicht es dir, den Namen zu verkürzen oder zu ändern, mit dem du auf ein externes Modul verweist. Wenn sie ohne Argumente verwendet wird, kürzt sie den Modulnamen auf sein letztes Segment, z. B. wird MyApp.Logger.Settings zu Settings. Ein benutzerdefinierter Name kann mit der Option :as angegeben werden.
Normalerweise werden Aliase am Anfang der Moduldefinition hinzugefügt.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
Die spezielle Form import ermöglicht es dir, Funktionen aus einem externen Modul zu verwenden, ohne den Namen des Moduls anzugeben.
Das Importieren eines ganzen externen Moduls kann zu Konflikten mit vorhandenen lokalen Funktionen führen. Um dies zu vermeiden, stehen zwei Optionen zur Verfügung: :except und :only. Beide erwarten eine Keyword-Liste, bei der der Schlüssel der Funktionsname und der Wert die Arity der Funktion ist.
Normalerweise werden Importe am Anfang der Moduldefinition hinzugefügt.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
Das ferngesteuerte Auto, das du dir vor Kurzem gekauft hast, ist zu einem ganz neuen Hobby geworden. Du hast angefangen, Rennen mit ferngesteuerten Autos zu organisieren.
Du warst fast fertig mit einem Programm, mit dem sich Rennsimulationen durchführen lassen, als deine Katze auf deine Tastatur sprang und ein paar Zeilen Code löschte. Jetzt lässt sich dein Programm nicht mehr kompilieren...
Race.__struct__/0 is undefined
Füge einen Alias hinzu, damit du auf das Modul NeedForSpeed.Race mit dem kürzeren Namen Race verweisen kannst.
Car.__struct__/0 is undefined
Füge einen Alias hinzu, damit du auf das Modul NeedForSpeed.RemoteControlCar mit dem kürzeren Namen Car verweisen kannst.
undefined function puts/1
Die Funktion puts/1 stammt aus dem Modul IO. Importiere es, damit du sie verwenden kannst, ohne das Modul anzugeben.
undefined function default_color/0
Die Funktionen default_color/0, red/0, cyan/0 und green/0 stammen alle aus dem Modul IO.ANSI. Du hast vor, Unterstützung für weitere Autofarben hinzuzufügen, deshalb möchtest du das ganze Modul importieren. Leider kollidiert die Funktion color/1 aus dem Modul IO.ANSI mit einer deiner lokalen Funktionen. Importiere das gesamte Modul IO.ANSI, außer dieser einen Funktion.
Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.