Avatar ·

当 Iterator::map 返回 Result::Err 时如何停止迭代并返回错误

你好,经验丰富的 Rustaceans!我是 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,而我需要一个没有 panic 的优雅解决方案。我尝试过使用 `filter_map`,但它只是忽略错误,而我需要传播它们。我还尝试过将整个代码包装在 `Result` 中: ```rust fn parse_numbers(input: Vec<&str>) -> Result, ParseIntError> { input.iter().map(|s| s.parse::()).collect() } ``` 但这不起作用,因为 `collect` 不知道如何将 `Vec>` 收集成 `Result, _>`。编译器报错。