繁体   English   中英

为什么我们不需要在某些rust迭代器中从Result提取值?

[英]Why don't we need to extract values from Result in some rust iterators?

在这里,我有一个简单的映射并通过迭代器求和:

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值表示迭代器的结尾)。 是否在Result对象上调用.len() 为什么我们不需要调用诸如map() *之类的东西来从Result提取值?

谢谢!

*我以为Result::mapIterator::map含义有所不同,但也许让我感到困惑...

标准库中有两lines

str一个 ,返回std::str::Lines ,它是&str的迭代器。 这是您正在使用的那个。 分割字符串不会失败,因此不需要使用Result

还有一个在std::io::BufRead ,它返回std::io::Lines 这是从BufRead读取的,这可能会失败(例如,如果驱动器变得无法访问,则读取网络驱动器上的文件可能会失败),因此它必须返回Result

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM