मैं इसके लिए प्रलेखनFile
पढ़ रहा हूं :
//..
let mut file = File::create("foo.txt")?;
//..
?
इस पंक्ति में क्या है ? मैं इसे रस्ट बुक में देखने से पहले याद नहीं करता।
मैं इसके लिए प्रलेखन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,
Err(e) => return Err(e),
};
// use `i`
}
यह बहुत अच्छा है क्योंकि:
यह आदर्श से कम है, हालांकि, इसमें यह बहुत ही क्रियात्मक है। यह वह जगह है जहाँ प्रश्न चिह्न ऑपरेटर ?
आता है।
ऊपर के रूप में फिर से लिखा जा सकता है:
fn do_the_thing(i: i32) -> Result<i32, Error> {
let i = halves_if_even(i)?;
// use `i`
}
जो बहुत अधिक संक्षिप्त है।
?
यहाँ क्या है match
ऊपर दिए गए कथन के बराबर है । संक्षेप में: यह Result
if को ठीक करता है और यदि नहीं तो त्रुटि देता है।
यह थोड़ा सा जादू है, लेकिन त्रुटि से निपटने के लिए बॉयलरप्लेट को काटने के लिए कुछ जादू की आवश्यकता होती है, और अपवादों के विपरीत यह तुरंत दिखाई देता है कि कौन से फ़ंक्शन कॉल में त्रुटि हो सकती है या बाहर नहीं हो सकती: जो कि सजी हैं ?
।
जादू का एक उदाहरण यह है कि यह भी काम करता है Option
:
// Assume
// fn halves_if_even(i: i32) -> Option<i32>
fn do_the_thing(i: i32) -> Option<i32> {
let i = halves_if_even(i)?;
// use `i`
}
यह (अस्थिर) Try
विशेषता द्वारा संचालित है ।
यह सभी देखें:
Result
या Option
।
यह पुनर्प्राप्ति योग्य त्रुटि प्रकार परिणाम <T, E> के लिए त्रुटि प्रसार के लिए है। यह परिणाम को उजागर करता है और आपको आंतरिक मूल्य देता है।
त्रुटि मामले को संभालने के बजाय, आप इसे कॉलर कोड में प्रचारित करते हैं और केवल ओके केस से निपटते हैं। लाभ है, यह बहुत सारे बॉयलरप्लेट को समाप्त करता है और फ़ंक्शन के कार्यान्वयन को सरल बनाता है।
.unwrap()
एक त्रुटि के मामले में वास्तविक पैनिक से भ्रमित होने की नहीं ।