यह एक अच्छा सवाल है। थोड़ा सा शोध करने के बाद।
मुख्य रूप से, आप नियंत्रण प्रवाह और त्रुटियों के लिए आरक्षित raise
, जो डेवलपर गलतियों पर या असाधारण परिस्थितियों में होता है के लिए throw
उपयोग करना चाहिए।
अमृत में, इस तरह के अंतर बल्कि सैद्धांतिक है, लेकिन वे में कोई फर्क रूबी, जहां नियंत्रण प्रवाह के लिए त्रुटियों/अपवाद का उपयोग कर महंगा है, क्योंकि अपवाद वस्तु बनाने और पश्व-अनुरेखन महंगा है जैसे कुछ भाषाओं।
- मैं एक एक विशिष्ट उपयोग के मामले में उपयोग करने के लिए चयन कैसे करना चाहिए?
कृपया इस जवाब Which situations require throw catch in Elixir
कुछ ही समय की जाँच करें:
raise/rescue
स्पष्ट रूप से अपवाद हैंडलिंग (प्रोग्रामर त्रुटियों जैसे कुछ अप्रत्याशित स्थिति, गलत पर्यावरण, आदि) के बारे में होने/बचाव जुटाने पर विचार करें।
throw/catch
स्थानों पर जहां आप विफलताओं की उम्मीद है में उपयोगी है। क्लासिक उदाहरण हैं:
अंतिम एक:
- 'ऐसी स्थितियां कहां हैं जहां फेंकने और पकड़ने के द्वारा मूल्य को पुनर्प्राप्त करना संभव नहीं है?
मान लें कि आप Supervisor
द्वारा पर्यवेक्षित प्रक्रिया से कुछ कोड चलाने की कोशिश कर रहे हैं लेकिन प्रक्रिया एक अप्रत्याशित कारण के लिए मर जाती है।
try do
IO.inspect MayRaiseGenServer.maybe_will_raise
rescue
RuntimeError -> IO.puts "there was an error"
end
MayRaiseGenServer
एक Supervisor
की देखरेख कर रहा है और किसी कारण के लिए एक त्रुटि मिली:
try do
IO.inspect MayRaiseGenServer.maybe_will_raise # <- Code after this line is no longer executed
और फिर आप पकड़ यहाँ एक अपवाद का उपयोग कर के साथ आ सकते हैं:
try do
IO.inspect MayRaiseGenServer.maybe_will_raise
catch
:exit, _ -> IO.puts "there was an error"
end
ठीक है जो कुछ भी हम स्पष्ट कर रहे हैं उसे स्पष्ट करते हैं।
आपको उनका बिल्कुल उपयोग नहीं करना चाहिए;) यह जावा नहीं है कि आप सभी त्रुटियों को 'कोशिश/पकड़ना' चाहते हैं। आपको पर्यवेक्षकों का उपयोग करना चाहिए जब आपके ऐप को मजबूत बनाने के लिए त्रुटि हुई या जब भी त्रुटि होनी चाहिए, तब तक उठाएं। – PatNowak
संभावित डुप्लिकेट [कौन सी स्थितियों को इलीक्सिर में थ्रो/कैच की आवश्यकता है?] (Http://stackoverflow.com/questions/36036480/which-situations-require-throw-catch-in-elixir) –