2011-01-28 10 views
11

मैं Three Cool Things About D - The Case for the D Programing Language देख रहा हूं और यह मूल रूप से कहता है कि कोशिश/पकड़/आखिरकार (38 मार्क के बारे में 39:30 का कहना है कि आप इसे उत्पन्न करने/पकड़ने की कोशिश नहीं करना चाहते हैं), इसका दायरा (विफलता) का उपयोग करने के लिए बहुत अच्छा है (वे भी बाहर निकलें और सफलता)।डी में पकड़ने के लिए वैकल्पिक?

मेरा प्रश्न तब होता है जब आप अपवाद की जांच करना चाहते हैं और अपवाद के आधार पर एक क्रिया करते हैं जैसे उपयोगकर्ता को डिस्क को कोई स्थान नहीं है या 404 के रूप में यूआरएल चिह्नित करें (.NET वेब क्लाइंट/वेबरेक्वेस्ट इस पर फेंकता है) या 500 त्रुटि कोड होने पर बाद में पुनः प्रयास करें। यह मैं कैसे करूंगा? क्या मुझे कोशिश/पकड़ का उपयोग करना चाहिए या कोई और तरीका है?

उत्तर

16

scope कथन आपको उस दायरे से बाहर निकलने के दौरान कोड चलाने की अनुमति देता है जो आप उन्हें घोषित करते हैं। scope(success) सामान्य रूप से दायरे से बाहर निकलने पर चलता है। scope(failure) किसी अपवाद को फेंकने के कारण दायरे से बाहर निकलने पर चलता है। scope(exit) स्कोप से बाहर निकलने पर निर्भर करता है चाहे आप दायरे से कैसे बाहर निकलें। उनमें से कोई भी आपको फेंकने वाले किसी भी अपवाद तक पहुंच प्रदान नहीं करता है। वे उस दायरे से बाहर निकलने के तरीके के आधार पर वर्तमान दायरे से बाहर निकलने पर आपको कोड चलाने की अनुमति देते हैं।

तो, अनिवार्य रूप से, जिन मामलों में आप एक अपवाद को पकड़ने होता है, कुछ करना है, और फिर देखभाल क्या अपवाद वास्तव में था बिना फिर से फेंक में, scope(failure)catch के बजाय इस्तेमाल किया जा सकता है, और scope(exit)finally के स्थान पर किया जा सकता है। हालांकि, अगर आपको वास्तव में अपवाद की आवश्यकता है, तो आपको इसे try - catch ब्लॉक का उपयोग करके पकड़ना होगा। scope बस आपको अपवाद तक पहुंच प्रदान नहीं करता है, इसलिए आप scope कथन का उपयोग नहीं कर सकते हैं यदि आप वास्तव में किसी अपवाद के साथ कुछ करना चाहते हैं जो फेंक दिया गया था। हालांकि, scope बहुत अच्छा काम करता है जब आपको परवाह नहीं है कि वास्तव में अपवाद क्या था।

+0

जो मैंने सोचा था। मैं बस यह सुनिश्चित करने के लिए कह रहा था कि मुझे कुछ भी याद नहीं है। सुन कर अच्छा लगा। +1 और स्वीकार किया गया –

1

scopecatch को प्रतिस्थापित नहीं करता है। जब आप वास्तव में (या पुनर्प्राप्त) अपवाद को संभालते हैं तो आपको catch का उपयोग करना होगा। यदि आप अनावश्यक स्टैक के दौरान साफ ​​करना चाहते हैं तो scope या कभी-कभी finally का उपयोग करना पसंद करते हैं। इस तरह आप बहुत साफ और रखरखाव कोड प्राप्त करेंगे।

संबंधित मुद्दे