2017-04-02 7 views
7

मेरा पहला विचार mapOption पर है, लेकिन मैं बंद होने के अंदर से try! का उपयोग नहीं कर सकता। match कथन अनावश्यक दिखता है, लेकिन मैं यह समझ नहीं सकता कि इसे कैसे सरल बनाना है।क्या विकल्प <Result<T, E>> परिणाम <Option<T>, ई> में मिलान किए बिना परिणाम परिवर्तित करना संभव है?

fn example<T, E>(val: Option<Result<T, E>>) -> Result<Option<T>, E> { 
    Ok(match val { 
     Some(v) => Some(v?), 
     None => None 
    }) 
} 

उत्तर

6

आप उपयोग कर सकते हैं:

val.map_or(Ok(None), |v| v.map(Some)) 
+2

और रिवर्स 'val.map द्वारा किया जा सकता (| v | v.map (ठीक)) unwrap_or_else (| ई | कुछ (अं (। ई))) ' – Arnavion

संबंधित मुद्दे