2015-11-04 5 views
5

the documentation से:`Iterator.find() 'को एक परिवर्तनीय' स्वयं 'संदर्भ की आवश्यकता क्यों है?

fn find<P>(&mut self, predicate: P) -> Option<Self::Item> 
where P: FnMut(&Self::Item) -> bool 

मैं देख नहीं क्यों यह self करने के लिए एक परिवर्तनशील रेफरी की जरूरत है। क्या कोई समझा सकता है?

उत्तर

6

इसे self को म्यूट करने में सक्षम होना चाहिए क्योंकि यह इटरेटर को आगे बढ़ा रहा है। हर बार जब आप next फोन, इटरेटर उत्परिवर्तित:

fn next(&mut self) -> Option<Self::Item>; 

यहाँ the implementation of find है:

fn find<P>(&mut self, mut predicate: P) -> Option<Self::Item> where 
    Self: Sized, 
    P: FnMut(&Self::Item) -> bool, 
{ 
    for x in self.by_ref() { 
     if predicate(&x) { return Some(x) } 
    } 
    None 
} 
+0

धन्यवाद। इतना स्पष्ट! –

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