खोज…


टिप्पणियों

ध्यान दें कि do...end सिंटैक्स नियमित कीवर्ड सूचियों के लिए सिंटैक्टिक शुगर है, इसलिए आप वास्तव में ऐसा कर सकते हैं:

unless false, do: IO.puts("Condition is false")
# Outputs "Condition is false"

# With an `else`:
if false, do: IO.puts("Condition is true"), else: IO.puts("Condition is false")
# Outputs "Condition is false"

मामला

 case {1, 2} do
  {3, 4} ->
    "This clause won't match."
  {1, x} ->
    "This clause will match and bind x to 2 in this clause."
  _ ->
    "This clause would match any value."
end

case केवल विशेष डेटा के दिए गए पैटर्न से मेल खाने के लिए उपयोग किया जाता है। यहां, {1,2} विभिन्न केस पैटर्न के साथ मेल खा रहा है जो कोड उदाहरण में दिया गया है।

अगर और जब तक

if true do
    "Will be seen since condition is true."
end    

if false do
    "Won't be seen since condition is false."
else
    "Will be seen.
end

unless false do
    "Will be seen."
end

unless true do 
    "Won't be seen."
else
    "Will be seen."
end

cond

cond do 
   0 == 1 -> IO.puts "0 = 1"
   2 == 1 + 1 -> IO.puts "1 + 1 = 2" 
   3 == 1 + 2 -> IO.puts "1 + 2 = 3" 
end

# Outputs "1 + 1 = 2" (first condition evaluating to true)

cond एक बढ़ा देंगे CondClauseError अगर कोई शर्त सही हैं।

cond do
  1 == 2 -> "Hmmm"
  "foo" == "bar" -> "What?"
end
# Error

इसे ऐसी शर्त से जोड़ा जा सकता है जो हमेशा सच होगी।

cond do
  ... other conditions
  true -> "Default value"
end

जब तक कि डिफ़ॉल्ट मामले तक पहुंचने की उम्मीद नहीं की जाती है, और कार्यक्रम को वास्तव में उस बिंदु पर दुर्घटनाग्रस्त होना चाहिए।

खंड के साथ

क्लॉज़ के with मैचिंग क्लॉज़ को संयोजित करने के लिए उपयोग किया जाता है। ऐसा लगता है कि हम कई निकायों के साथ अनाम फ़ंक्शन या हैंडल फ़ंक्शन को जोड़ते हैं (मिलान खंड)। मामले पर विचार करें: हम एक उपयोगकर्ता बनाते हैं, उसे DB में सम्मिलित करते हैं, फिर ग्रीटिंग ईमेल बनाते हैं और फिर उसे उपयोगकर्ता को भेजते हैं।

बिना with खंड हम कुछ इस तरह लिख सकते हैं (मैं कार्यों कार्यान्वयन छोड़े गए):

case create_user(user_params) do
  {:ok, user} ->
    case Mailer.compose_email(user) do
      {:ok, email} ->
        Mailer.send_email(email)
      {:error, reason} ->
        handle_error
    end
  {:error, changeset} ->
    handle_error
end

यहाँ हम साथ हमारे व्यापार प्रक्रिया के प्रवाह को संभालने case (यह हो सकता है cond या if )। यह हमें तथाकथित 'कयामत के पिरामिड' की ओर ले जाता है, क्योंकि हमें संभावित परिस्थितियों से निपटना है और यह तय करना है: आगे बढ़ना है या नहीं। यह के साथ इस कोड को फिर से लिखने के लिए बहुत कुछ अच्छा होगा with बयान:

with {:ok, user} <- create_user(user_params),
     {:ok, email} <- Mailer.compose_email(user) do
  {:ok, Mailer.send_email}
else
  {:error, _reason} ->
    handle_error
end

कोड में स्निपेट के ऊपर हम फिर से लिखने नेस्टेड है case के साथ खंड with । भीतर with हम अपने आउटपुट पर कुछ कार्यों (या तो गुमनाम या नाम) और पैटर्न मैच आह्वान। यदि सभी मिलान, with वापसी do ब्लॉक परिणाम, या else अन्यथा ब्लॉक परिणाम।

हम छोड़ सकते हैं else तो with वापसी या तो होगा do ब्लॉक परिणाम या पहले असफल परिणाम।

तो, के मूल्य के with बयान अपनी है do ब्लॉक परिणाम।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow