Los structs son mapas especiales con un conjunto definido de claves.
defstruct.
defstruct acepta una lista de átomos (cuando el valor por defecto es nil) o listas de palabras clave (con valores por defecto concretos).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
La mayoría de las funciones que trabajan con mapas también funcionan con structs.
Se recomienda usar el operador de acceso estático . para acceder a los campos de un struct.
Obtener/recuperar los valores de los campos:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Actualizar los valores de los campos
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys crea una comprobación en tiempo de ejecución de que los campos indicados deben inicializarse con un valor que no sea nil al crear el struct.@enforce_keys le sigue una lista de las claves de los campos (que son átomos).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]