ماذا يعني عامل علامة الاستفهام (?) في 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)
}
```
يبدو أن `?` يستبدل كتلة كاملة