ماذا يفعل عامل الاستفهام (?) في 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 content = String::new();
file.read_to_string(&mut content)?;
Ok(content)
}
```
أفهم أن `File::open` يُرجع `Result`، لكن ماذا يفعل هذا `?` في نهاية السطر؟ بدونه، يشتكي المترجم من أنني لا أتعامل مع `Result`. لكن إذا أضفت `?`، يعمل الكود.
حاولت قراءة التوثيق، لكنه مكتوب بشكل معقد. هل يمكنكم الشرح بكلمات بسيطة: ما هذه العلامة السحرية للاستفهام؟ هل لها علاقة بـ `unwrap()` أو `match`؟ لماذا تُرجع الدالة `Result`، لكن في الجسم يمكنني استخدام `?` دون كتابة match لكل استدعاء؟
مثال يربكني: إذا استبدلت `?` بـ `.unwrap()`، يعمل الكود أيضًا، لكن عند حدوث خطأ يتعطل البرنامج.