Τα structs είναι ειδικοί maps με ένα καθορισμένο σύνολο κλειδιών.
defstruct.
defstruct δέχεται είτε μια λίστα από atoms (για προεπιλεγμένες τιμές nil) είτε λίστες με λέξεις-κλειδιά (για συγκεκριμένες προεπιλεγμένες τιμές).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
Οι περισσότερες συναρτήσεις που δουλεύουν με maps θα δουλέψουν και με structs.
Συνιστάται να χρησιμοποιείς τον τελεστή στατικής πρόσβασης . για να προσπελάσεις τα πεδία ενός struct.
Λήψη/ανάκτηση τιμών πεδίων:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Ενημέρωση τιμών πεδίων
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys δημιουργεί έναν έλεγχο κατά τον χρόνο εκτέλεσης ότι συγκεκριμένα πεδία πρέπει να αρχικοποιούνται σε τιμή μη-nil όταν δημιουργείται το struct.@enforce_keys ακολουθείται από μια λίστα με τα κλειδιά των πεδίων (τα οποία είναι atoms).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]