为什么铁锈收集方法在两个几乎相同的功能上工作不同

  • 本文关键字:两个 工作 功能上 方法 rust
  • 更新时间 :
  • 英文 :


我做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,它只是从迭代器创建一个向量。

因此,第一个版本会累积成功的结果,如果有第一个失败,则返回第一个,而第二个版本只收集所有结果,而不管它们的成功或失败。

最新更新