小编Rus*_*Bob的帖子

如何确定 Rust 迭代器的结果类型?

我正在通过rustlings练习来学习 Rust。我已经达到了iterator3.rs练习并且被卡住了。这个练习要求我提供一行代码,作为操作的一部分,将结果从一种类型映射到另一种类型;我需要用正确的操作填写 x= 行。有两部分 - 第一部分阅读:

let numbers = vec![27, 297, 38502, 81];
let division_results = numbers.into_iter().map(|n| divide(n, 27));
let x = ???
assert_eq!(format!("{:?}", x), "Ok([1, 11, 1426, 3])");
Run Code Online (Sandbox Code Playgroud)

下一个是相同的,但输出断言的格式略有不同:

assert_eq!(format!("{:?}", x), "[Ok(1), Ok(11), Ok(1426), Ok(3)]");
Run Code Online (Sandbox Code Playgroud)

我相信我明白第一个实例需要返回一个包含 i32 向量或某种错误类型的结果。第二个需要返回一个结果向量,每个结果都有一个 i32 或一个错误类型。

但是,我通常难以理解如何确定 into_iter、map 和 collect 的组合返回的类型。我可以使用一些帮助来学习如何推理或获得编译器帮助。

这是我到目前为止的位置:

我不明白 Division_results 的结果类型是什么。我曾尝试使用编译器错误消息以及此问题的答案来查找,但结果对我来说是不透明的,可能是因为懒惰的评估。例如,只需将 x 替换为 Division_results,这样 assert 就会显示类型,如下所示:

assert_eq!(format!("{:?}", division_results), "Ok([1, 11, 1426, 3])");
Run Code Online (Sandbox Code Playgroud)

给我这个结果:

left: `"Map { iter: IntoIter([27, 297, 38502, 81]) }"`,
right: `"Ok([1, 11, …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
345
查看次数

标签 统计

rust ×1