Структури - це особливі словники з визначеним набором ключів.
defstruct.
defstruct приймає або список атомів (для типових значень nil), або списки ключових слів (для заданих типових значень).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
Більшість функцій, які працюють зі словниками, будуть працювати і зі структурами.
Для доступу до полів структури радимо використовувати оператор статичного доступу ..
Отримати значення полів:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
Оновити значення полів
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys створює перевірку під час виконання: указані поля мають бути ініціалізовані значенням, яке не дорівнює nil, коли створюється структура.@enforce_keys іде список ключів полів (це атоми).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]