Avatar ·

ماذا يعني عامل علامة الاستفهام (?) في Rust وكيف يعمل؟

مرحباً بالجميع! بدأت تعلم Rust مؤخراً وصادفت عاملاً غريباً — علامة الاستفهام (?). رأيته في كود شخص آخر لكنني لا أستطيع فهم ما يفعله. هذا مثال وجدته: ```rust use std::fs::File; use std::io::Read; fn read_file(path: &str) -> Result { let mut file = File::open(path)?; // ماذا يفعل `?` هنا؟ let mut contents = String::new(); file.read_to_string(&mut contents)?; // وهنا؟ Ok(contents) } ``` حاولت كتابة كود مشابه بدون هذا العامل باستخدام `match`، وكان النتيجة طويلة جداً: ```rust fn read_file_verbose(path: &str) -> Result { let mut file = match File::open(path) { Ok(f) => f, Err(e) => return Err(e), }; let mut contents = String::new(); match file.read_to_string(&mut contents) { Ok(_) => {}, Err(e) => return Err(e), }; Ok(contents) } ``` يبدو أن `?` يستبدل كتلة كاملة