2017-06-20 5 views
0

Von der std::iter::Iterator Dokumentation, kann ich sehen, dass nur die next Verfahren erforderlich:Woher weiß Rust, welche Merkmalsarten benötigt oder bereitgestellt werden?

Benötigte Verfahren

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

Aber vom source code, nach dem Entfernen Kommentare:

pub trait Iterator { 
    /// The type of the elements being iterated over. 
    #[stable(feature = "rust1", since = "1.0.0")] 
    type Item; 
    ...... 
    #[stable(feature = "rust1", since = "1.0.0")] 
    fn next(&mut self) -> Option<Self::Item>; 
    ...... 
    #[inline] 
    #[stable(feature = "rust1", since = "1.0.0")] 
    fn size_hint(&self) -> (usize, Option<usize>) { (0, None) } 
    ...... 
} 

Ich kann sehen, außer für die #[inline] Attribut, Es besteht kein Unterschied zwischen erforderlichen und bereitgestellten Methoden. Woher weiß Rust, welche Methode benötigt oder bereitgestellt wird?

Antwort

4

Es ist ziemlich einfach: die bereitgestellten (optionalen) Funktionen haben eine Standardimplementierung, nicht die erforderliche.

Beachten Sie, dass Sie die bereitgestellten Funktionen erneut implementieren können, wenn Sie möchten, damit es besser als die Standardfunktion für Ihre bestimmte Struktur/enum ausgeführt werden kann.

7

mit Ausnahme des #[inline] Attribut, gibt es keinen Unterschied zwischen geforderten und bereitgestellten Verfahren

Es gibt einen großen Unterschied, man muss nur die (fehlenden) Formatierung ignorieren. Gestatten Sie mir, Sie zu formatieren:

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

fn size_hint(&self) -> (usize, Option<usize>) { // Starting with `{` 
    (0, None)         // 
}            // Ending with `}` 

alle Standardmethoden eine Funktion Körper haben. Die erforderlichen Methoden nicht.

Ich würde dringend empfehlen, erneut lesen The Rust Programming Language, speziell the chapter about traits and default implementations. Diese Ressource ist ein viel besserer Weg, um mit Einführungsthemen wie diesem zu beginnen, als willkürliche Snippets der Standardbibliothek zu lesen.

Verwandte Themen