【问题标题】:Why don't we need to extract values from Result in some rust iterators?为什么我们不需要在一些 rust 迭代器中从 Result 中提取值?
【发布时间】:2019-08-19 17:48:34
【问题描述】:

在这里,我有一个简单的映射和迭代器的总和:

fn main() {
    let s = "
aoeu
aoeu
aoeu
aoeu
";

    let ls = s.lines();
    let i: usize = ls.map(|l| l.len()).sum();
    dbg!(i);
}

这编译并运行良好。当我查看source for lines 时,next 方法返回Option<Result<String>>

但上面的地图直接在每个项目上调用.len()。我知道该值是从 Option 内部提取的(None 值意味着迭代器的结束)。 .len() 是否在 Result 对象上被调用?为什么我们不需要调用 map()* 之类的东西来从 Result 中提取值?

谢谢!

* 我原以为Result::mapIterator::map 有不同的含义,但也许我自己搞糊涂了……

【问题讨论】:

标签: rust


【解决方案1】:

There are two lines in the standard library.

one on str,它返回std::str::Lines,它是&str 的迭代器。这是您正在使用的那个。拆分字符串不会失败,所以不需要使用Result

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

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2016-08-01
    • 1970-01-01
    • 2013-06-22
    • 2020-11-07
    • 1970-01-01
    • 2013-04-06
    • 2015-08-18
    • 2019-06-14
    相关资源
    最近更新 更多