[英]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::map
与Iterator::map
含义有所不同,但也许让我感到困惑...
str
上的一个 ,返回std::str::Lines
,它是&str
的迭代器。 这是您正在使用的那个。 分割字符串不会失败,因此不需要使用Result
。
还有一个在std::io::BufRead
,它返回std::io::Lines
。 这是从BufRead
读取的,这可能会失败(例如,如果驱动器变得无法访问,则读取网络驱动器上的文件可能会失败),因此它必须返回Result
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.