structها mapهای ویژهای با مجموعهای مشخص از کلیدها هستند.
defstruct استفاده کنید.
defstruct یا فهرستی از اتمها را میپذیرد (برای مقادیر پیشفرض nil) یا فهرستهای کلیدواژه را (برای مقادیر پیشفرض مشخصشده).
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
بیشتر توابعی که با mapها کار میکنند، با structها هم کار میکنند.
توصیه میشود برای دسترسی به فیلدهای struct از عملگر دسترسی ایستا . استفاده کنید.
گرفتن/واکشی مقادیر فیلد:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
بهروزرسانی مقادیر فیلد
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys یک بررسی در زمان اجرا ایجاد میکند که فیلدهای مشخصشده باید هنگام ساخت struct به مقداری غیر از 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]