第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

當(dāng)Iterator :: map返回Result :: Err時(shí),如何停止迭代并返回錯(cuò)誤?

當(dāng)Iterator :: map返回Result :: Err時(shí),如何停止迭代并返回錯(cuò)誤?

慕碼人8056858 2019-09-24 15:37:29
我有一個(gè)函數(shù)返回一個(gè)Result:fn find(id: &Id) -> Result<Item, ItemError> {    // ...}然后另一個(gè)像這樣使用它:let parent_items: Vec<Item> = parent_ids.iter()    .map(|id| find(id).unwrap())    .collect();如何處理任何map迭代中的失敗情況?我知道我可以使用flat_map,在這種情況下,錯(cuò)誤結(jié)果將被忽略:let parent_items: Vec<Item> = parent_ids.iter()    .flat_map(|id| find(id).into_iter())    .collect();Result的迭代器根據(jù)成功狀態(tài)有0或1個(gè)項(xiàng)目,flat_map如果為0 ,則會將其過濾掉。但是,我不想忽略錯(cuò)誤,而是想使整個(gè)代碼塊停止并返回一個(gè)新錯(cuò)誤(基于映射內(nèi)出現(xiàn)的錯(cuò)誤,或者僅轉(zhuǎn)發(fā)現(xiàn)有錯(cuò)誤)。如何在Rust中最好地解決這個(gè)問題?
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

此答案與Rust的1.0之前版本有關(guān),并且刪除了所需的功能


您可以std::result::fold為此使用功能。遇到第一個(gè)后,它將停止迭代Err。


我剛剛編寫的示例程序:


fn main() {

  println!("{}", go([1, 2, 3]));

  println!("{}", go([1, -2, 3]));

}


fn go(v: &[int]) -> Result<Vec<int>, String> {

    std::result::fold(

        v.iter().map(|&n| is_positive(n)),

        vec![],

        |mut v, e| {

            v.push(e);

            v

        })

}


fn is_positive(n: int) -> Result<int, String> {

    if n > 0 {

        Ok(n)

    } else {

        Err(format!("{} is not positive!", n))

    }

}

輸出:


Ok([1, 2, 3])

Err(-2 is not positive!)


查看完整回答
反對 回復(fù) 2019-09-24
?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以應(yīng)用相同的技巧。密鑰位于的類型簽名中collect,該類型在返回類型上是多態(tài)的,必須實(shí)現(xiàn)FromIterator。我不知道您的意思是“可以更廣泛地應(yīng)用它”。Rust支持多態(tài)返回類型...那么,是嗎?(有關(guān)返回類型多態(tài)性的更多示例,請參見Rngand Defaulttrait。)

查看完整回答
反對 回復(fù) 2019-09-24
  • 3 回答
  • 0 關(guān)注
  • 661 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號