rust - 为什么我们不需要在一些 rust 迭代器中从 Result 中提取值?
问题描述
在这里,我有一个简单的映射和迭代器求和:
fn main() {
let s = "
aoeu
aoeu
aoeu
aoeu
";
let ls = s.lines();
let i: usize = ls.map(|l| l.len()).sum();
dbg!(i);
}
这编译并运行良好。当我查看源代码时lines
,该next
方法返回Option<Result<String>>
。
但是上面的地图直接调用.len()
每个项目。我知道该值是从内部提取的Option
(一个None
值意味着迭代器的结尾)。是.len()
被调用的Result
对象吗?为什么我们不需要调用map()
* 之类的东西来从中提取值Result
?
谢谢!
*我以为Result::map
与 有不同的含义Iterator::map
,但也许我自己感到困惑...
解决方案
一个onstr
,它返回std::str::Lines
,它是 的一个迭代器&str
。这是您正在使用的那个。拆分字符串不会失败,因此不需要使用Result
.
还有一个 onstd::io::BufRead
,它返回std::io::Lines
。这个从 a 读取BufRead
,可能会失败(例如,如果驱动器无法访问,读取网络驱动器上的文件可能会失败),因此它必须返回 a Result
。
推荐阅读
- android - 在 Hilt 中使用 ActivityRetainedScoped 时,存储库何时会被销毁?
- terraform - 为什么 `terraform fmt` 似乎没有改变任何文件名时会输出文件名?
- python - 如何在“for循环”中插入不同的列表切片?
- metrics - OpenTSDB 默认指标
- sql - 将 WHERE 子句优先于 2 列
- javascript - DataTable 无法从其他页面获取选中复选框的值
- angular - 最新 Angular 中的下拉菜单
- reactjs - 在单个 GitHub 存储库下部署多个应用程序 - Django + React
- html - jquery多个元素淡入淡出循环
- python - python脚本和Django REST API之间的通信