Structs sind besondere Maps mit einer festgelegten Menge von Schlüsseln.
defstruct.
defstruct akzeptiert entweder eine Liste von Atomen (für den Standardwert nil) oder Keyword-Listen (für festgelegte Standardwerte).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
Die meisten Funktionen, die mit Maps arbeiten, funktionieren auch mit Structs.
Für den Zugriff auf die Felder eines Structs solltest du den statischen Zugriffsoperator . verwenden.
Feldwerte abrufen:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Feldwerte aktualisieren
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys-Modulattribut erzeugt eine Prüfung zur Laufzeit, dass angegebene Felder mit einem nicht-nil-Wert initialisiert werden müssen, wenn das Struct erstellt wird.@enforce_keys folgt eine Liste der Feldschlüssel (die Atome sind).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]