As structs são mapas especiais com um conjunto definido de chaves.
defstruct.
defstruct aceita quer uma lista de átomos (para valores predefinidos nil) quer listas de palavras-chave (para valores predefinidos especificados).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
A maioria das funções que trabalham com mapas também funciona com structs.
Recomenda-se usar o operador de acesso estático . para aceder aos campos da struct.
Obter/ir buscar valores dos campos:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Atualizar valores dos campos
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys cria uma verificação em tempo de execução de que os campos especificados têm de ser inicializados com um valor não nil quando a struct é criada.@enforce_keys é seguido de uma lista das chaves dos campos (que são átomos).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]