簡體   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