St

Structs in Elixir

21 Übungen

Über Structs

Structs sind besondere Maps mit einer festgelegten Menge von Schlüsseln.

  • Structs bieten Prüfungen zur Kompilierzeit und Standardwerte.
  • Ein Struct wird nach dem Modul benannt, in dem es definiert ist.
  • Um ein Struct zu definieren, verwendest du das Konstrukt defstruct.
    • Das Konstrukt folgt in der Regel direkt auf die Moduldefinition.
  • defstruct akzeptiert entweder eine Liste von Atomen (für den Standardwert nil) oder Keyword-Listen (für festgelegte Standardwerte).
    • Die Felder ohne Standardwert müssen vor den Feldern mit Standardwerten stehen.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

Zugriff auf Felder und Aktualisierung

  • Die meisten Funktionen, die mit Maps arbeiten, funktionieren auch mit Structs.

    • Das Access Behaviour ist eine Ausnahme und ist für Structs nicht implementiert.
  • 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}
    

Initialisierung von Feldwerten erzwingen

  • Das @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.
  • Auf @enforce_keys folgt eine Liste der Feldschlüssel (die Atome sind).
  • Wenn ein erzwungener Schlüssel nicht initialisiert wird, wird ein Fehler ausgelöst.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Structs

Das Üben ist gesperrt

Schalte 9 weitere Übungen frei, um Structs zu üben