كيفية إيقاف التكرار وإرجاع خطأ عندما يُرجع Iterator::map Result::Err؟
مرحبًا أيها المبرمجون الخبراء في Rust! أنا مبتدئ في Rust وأواجه مشكلة منذ عدة ساعات. لدي متجه من السلاسل النصية أريد تحويلها إلى أرقام باستخدام `Iterator::map` و `str::parse::()`. المشكلة هي أن `parse` يُرجع `Result`، وإذا كان أي سلسلة نصية ليست رقمًا، أريد إيقاف التكرار فورًا وإرجاع الخطأ إلى الكود المستدعي.
إليك الكود الخاص بي:
```rust
fn parse_numbers(input: Vec<&str>) -> Vec {
input.iter().map(|s| s.parse::().unwrap()).collect()
}
```
`unwrap()` يُحدث ذعرًا (panic)، وأحتاج إلى حل أنيق بدون ذعر. جربت استخدام `filter_map` لكنه يتجاهل الأخطاء ببساطة، بينما أحتاج إلى تمريرها. كما جربت تغليف كل شيء في `Result`:
```rust
fn parse_numbers(input: Vec<&str>) -> Result, ParseIntError> {
input.iter().map(|s| s.parse::()).collect()
}
```
لكن هذا لا يعمل لأن `collect` لا يعرف كيفية جمع `Vec>` إلى `Result, _>`. المترجم يشتكي.