Le struct sono delle mappe speciali con un insieme definito di chiavi.
defstruct.
defstruct accetta una lista di atomi (per valori predefiniti nil) oppure liste di keyword (per valori predefiniti specificati).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
La maggior parte delle funzioni che lavorano con le mappe funziona anche con le struct.
Si consiglia di usare l'operatore di accesso statico . per accedere ai campi di una struct.
Ottenere/recuperare i valori dei campi:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Aggiornare i valori dei campi
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys crea un controllo a runtime che i campi specificati devono essere inizializzati a un valore non nil quando viene creata la struct.@enforce_keys è seguito da una lista delle chiavi dei campi (che sono atomi).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]