স্ট্রাক্ট হলো নির্দিষ্ট কী (key)-এর সেটবিশিষ্ট বিশেষ ম্যাপ।
defstruct কনস্ট্রাক্টটি ব্যবহার করুন।
defstruct হয় অ্যাটম-এর একটি লিস্ট (nil ডিফল্ট মানের জন্য) নেয়, নয়তো কিওয়ার্ড লিস্ট (নির্দিষ্ট ডিফল্ট মানের জন্য) নেয়।
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
ম্যাপ-এর সাথে কাজ করা বেশিরভাগ ফাংশন স্ট্রাক্টের সাথেও কাজ করে।
স্ট্রাক্টের ফিল্ড অ্যাক্সেস করতে static access operator . ব্যবহার করা সুপারিশ করা হয়।
ফিল্ডের মান পাওয়া/আনা:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
ফিল্ডের মান আপডেট করা:
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys মডিউল অ্যাট্রিবিউট একটি রান-টাইম চেক তৈরি করে, যাতে স্ট্রাক্ট তৈরি করার সময় নির্দিষ্ট ফিল্ডগুলো non-nil মান দিয়ে ইনিশিয়ালাইজ করতেই হয়।@enforce_keys-এর পরে থাকে ফিল্ডের কী (key)-গুলোর একটি লিস্ট (যেগুলো অ্যাটম)।defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]