Les structs sont des maps particuliers, avec un ensemble de clés défini.
defstruct.
defstruct accepte soit une liste d'atomes (pour des valeurs par défaut à nil), soit des listes de mots-clés (pour des valeurs par défaut explicites).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
La plupart des fonctions qui manipulent des maps fonctionnent aussi avec les structs.
Pour accéder aux champs d'un struct, il est recommandé d'utiliser l'opérateur d'accès statique ..
Lire et récupérer les valeurs des champs :
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Mettre à jour les valeurs des champs
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys crée une vérification à l'exécution : les champs concernés doivent être initialisés à une valeur qui n'est pas nil au moment de la création du struct.@enforce_keys est suivi d'une liste de clés de champs (qui sont des atomes).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]