स्ट्रक्ट खास तरह के मैप होते हैं, जिनमें की का एक तय सेट होता है।
defstruct कंस्ट्रक्ट का इस्तेमाल कीजिए।
defstruct या तो atoms का ऐरे (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 के बाद फील्ड के नामों का ऐरे आता है (ये नाम atoms होते हैं)।@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]