2017-08-30 19 views
6

मेरे पास Option एस का वेक्टर है और मैं केवल Some एस फ़िल्टर करना चाहता हूं। मैं पहचान के साथ filter_map का उपयोग करें:क्या जंग में एक अंतर्निहित पहचान कार्य है?

let v = vec![Some(1), None, Some(2)]; 
for i in v.into_iter().filter_map(|o| o) { 
    println!("{}", i); 
} 

वहाँ एक builtin समारोह filter_map(identity) की तरह कुछ लिखने के लिए अनुमति देने के लिए है?

+2

ध्यान दें कि 'पहचान' आपके मूल उदाहरण की तुलना में 4 और वर्ण हैं; मैं उम्मीद करता हूं कि लोग इसे टाइप करने के लिए बहुत आलसी होंगे^_ ^। – Shepmaster

+4

@ शेमपस्टर कभी-कभी व्यक्तित्व ब्रेवटी से बेहतर है: पी – Boiethios

+0

@ शेमपस्टर: आपके उत्तर के साथ, एफ # इसे 'आईडी' कहते हैं, इसलिए कम से कम stdlib में इसके लिए उदाहरण है। – ildjarn

उत्तर

6

नहीं, ऐसा कोई कार्य नहीं है। आप अपना खुद का बना सकते हैं:

fn id<T>(v: T) -> T { v } 

हालांकि अधिकांश लोग केवल कोड को इनलाइन करते हैं, जैसा आपने किया था।

+0

जब आइटम स्थानांतरित नहीं होता है तो मैंने एक और बना दिया: 'fn id_deref (v: और विकल्प ) -> विकल्प <&T> {v.as_ref()}' – Boiethios

+2

@ बॉयथियोस मैं "पहचान" जैसी कुछ भी कहने में संकोच करता हूं "इस पर विचार करने से मूल्य बदल जाता है। मैं इसे "deref" भी नहीं कहूंगा क्योंकि इसका मतलब जंग में कुछ है जो कि कार्य नहीं करता है। इसके अलावा, वह कार्य अनावश्यक है; आप इसके बजाय 'विकल्प :: as_ref' कह सकते हैं। – Shepmaster

+0

अंतिम बिंदु के लिए धन्यवाद, आप मुझे कुछ सिखाते हैं। – Boiethios

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