Avatar ·

كيفية إيقاف التكرار وإرجاع خطأ عندما يُرجع 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, _>`. المترجم يشتكي.