2016-08-04 5 views
2

Wie hat man eine for ... in Schleife leihen den Iterator es funktioniert über? Zum Beispiel:Wie hat man eine for-Schleife den Iterator ausleihen?

let x = vec![1, 2, 3, 4]; 
let i = x.iter(); 
for a1 in i { break; } // iterate over just one "i" 
for a2 in i { break; } // continue iterating through "i" here 

Sie können einfach nicht &i auf den für geben, denn dann kann es nicht die &Iterator zu einem Iterator Objekt konvertieren.

Antwort

2

Sie Iterator::by_ref den Iterator leihen können und sie weiter nach dem Borrow verwenden endet:

fn main() { 
    let x = vec![1, 2, 3, 4]; 
    let mut i = x.iter(); 
    for _ in i.by_ref() { break; } // iterate over just one "i" 
    for _ in i.by_ref() { break; } // continue iterating through "i" here 
    assert_eq!(Some(&3), i.next()) 
} 
+0

Dies ist eine gute Antwort, b Es schlägt fehl, wenn Sie (auch nicht veränderbare) verschachtelte Iteratoren auf "i" haben möchten. – njaard

2

Alle Iteratoren haben eine next() Funktion, die den Iterator vorrückt und gibt ein Option<Self::Item> (das heißt, sie kehren entweder None oder ein Some Wert zu enthalten, welcher Art auch immer Sie iterieren. Sie können diese Funktion aufrufen, sich manuell zu erhöhen . der Iterator jedoch oft Sie wollen, die wie es sich anhört würde Ihr Problem in diesem Fall lösen

Verwandte Themen