我做rustlings是为了学习rust,我刚刚完成迭代器3,但我不明白为什么函数:
// Output: Ok([1, 11, 1426, 3])
fn result_with_list() -> Result<Vec<i32>, DivisionError> {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x: Result<Vec<i32>, DivisionError> = division_results.collect();
println!("{x:?}");
x
}
和
// Output: [Ok(1), Ok(11), Ok(1426), Ok(3)]
fn list_of_results() -> Vec<Result<i32, DivisionError>> {
let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x:Vec<Result<i32, DivisionError>> = division_results.collect();
println!("{x:?}");
x
}
我不明白为什么它们会返回其他值,尽管它们非常相似
(附言:这就是函数划分的样子:pub fn divide(a: i32, b: i32) -> Result<i32, DivisionError>
(
rustling迭代器3练习
我不明白为什么它们会返回其他值,尽管它们几乎是相同的
因为不同的部分非常相关:使用FromIterator
实现Result
:
获取Iterator中的每个元素:如果它是Err,则不获取其他元素,并返回Err。如果没有出现错误,将返回一个包含每个Result值的容器。
而另一个使用FromIterator
实现Vec
,它只是从迭代器创建一个向量。
因此,第一个版本会累积成功的结果,如果有第一个失败,则返回第一个,而第二个版本只收集所有结果,而不管它们的成功或失败。