A structok olyan speciális map-ek, amelyeknek meghatározott kulcskészletük van.
defstruct szerkezetet.
defstruct elfogad vagy atomok listáját (ilyenkor az alapérték nil), vagy kulcsszólistákat (megadott alapértékekhez).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
A map-ekkel dolgozó függvények többsége a structokkal is működik.
A structok mezőinek eléréséhez ajánlott a statikus elérési operátort, a . jelet használni.
Mezőértékek lekérése:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Mezőértékek frissítése
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys modulattribútum egy futásidejű ellenőrzést hoz létre, amely szerint a megadott mezőknek a struct létrehozásakor nem nil értéket kell kapniuk.@enforce_keys után a mezőkulcsok listája áll (ezek atomok).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]