ट्रैक
/
Elixir
Elixir
/
सिलेबस
/
स्ट्रक्ट
स्

स्ट्रक्ट में Elixir

21 अभ्यास

स्ट्रक्ट के बारे में

स्ट्रक्ट खास तरह के मैप होते हैं, जिनमें की का एक तय सेट होता है।

  • स्ट्रक्ट कंपाइल के समय की जाँच और डिफॉल्ट वैल्यू देते हैं।
  • किसी स्ट्रक्ट का नाम उसी मॉड्यूल के नाम पर होता है जिसमें वह बनाया जाता है।
  • स्ट्रक्ट बनाने के लिए defstruct कंस्ट्रक्ट का इस्तेमाल कीजिए।
    • यह कंस्ट्रक्ट आम तौर पर मॉड्यूल की परिभाषा के ठीक बाद आता है।
  • defstruct या तो atoms का ऐरे (nil डिफॉल्ट वैल्यू के लिए) या कीवर्ड ऐरे (तय डिफॉल्ट वैल्यू के लिए) स्वीकार करता है।
    • जिन फील्ड की डिफॉल्ट वैल्यू नहीं है, वे डिफॉल्ट वैल्यू वाले फील्ड से पहले आने चाहिए।
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

फील्ड तक पहुँचना और उन्हें अपडेट करना

  • मैप के साथ काम करने वाले ज़्यादातर फंक्शन स्ट्रक्ट के साथ भी काम करेंगे।

    • Access Behaviour इसका अपवाद है और स्ट्रक्ट के लिए इसे लागू नहीं किया गया है।
  • स्ट्रक्ट के फील्ड तक पहुँचने के लिए स्टैटिक एक्सेस ऑपरेटर . इस्तेमाल करने की सलाह दी जाती है।

  • फील्ड की वैल्यू पाना/निकालना:

    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]
GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

स्ट्रक्ट सीखिए

अभ्यास लॉक है

स्ट्रक्ट पर अभ्यास करने के लिए 9 और अभ्यास अनलॉक कीजिए