[英]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.