मैं the documentation for File
पढ़ रहा हूँ:इस प्रश्न चिह्न ऑपरेटर के बारे में क्या है?
//..
let mut file = File::create("foo.txt")?;
//..
इस पंक्ति में ?
क्या है? मुझे इसे पहले रस्ट बुक में देखने को याद नहीं है।
मैं the documentation for File
पढ़ रहा हूँ:इस प्रश्न चिह्न ऑपरेटर के बारे में क्या है?
//..
let mut file = File::create("foo.txt")?;
//..
इस पंक्ति में ?
क्या है? मुझे इसे पहले रस्ट बुक में देखने को याद नहीं है।
जैसा कि आपने देखा होगा, जंग में अपवाद नहीं हैं। इसमें घबराहट है, लेकिन उनकी कार्यक्षमता सीमित है (वे संरचित जानकारी नहीं ले सकते हैं) और त्रुटि-हैंडलिंग के लिए उनका उपयोग निराश है (वे अप्राप्य त्रुटियों के लिए हैं)।
जंग में, त्रुटि प्रबंधन Result
का उपयोग करता है। एक विशिष्ट उदाहरण होगा:
fn halves_if_even(i: i32) -> Result<i32, Error> {
if i % 2 == 0 { Ok(i/2) } else { Err(/* something */) }
}
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = match halves_if_even(i) {
Ok(i) => i,
e => return e,
};
// use `i`
}
यह बहुत अच्छा है क्योंकि:
यह आदर्श से कम है, हालांकि, यह बहुत verbose है। यह जहां प्रश्न चिह्न ऑपरेटर ?
में आता है
ऊपर के रूप में लिखा जा सकता है:।
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = halves_if_even(i)?;
// use `i`
}
जो बहुत अधिक संक्षिप्त है।
क्या ?
ऊपर match
कथन के बराबर है। संक्षेप में: यह Result
को अनपैक करता है यदि ठीक है और देता है तो त्रुटि नहीं होती है।
यह थोड़ा जादू है, लेकिन त्रुटि प्रबंधन को बॉयलरप्लेट को काटने के लिए कुछ जादू की आवश्यकता होती है, और अपवादों के विपरीत यह तुरंत दिखाई देता है कि कौन से फ़ंक्शन कॉल ?
से सजाए गए हैं।