Ich bin eine Schließung auf den Iterator anwenden und ich möchte stabil, also möchte ich eine Box Iterator
zurückgeben. Der offensichtliche Weg, dies zu tun, ist folgende:Warum wird Box <Iterator <Item = &Foo> + 'a> benötigt?
struct Foo;
fn into_iterator(myvec: &Vec<Foo>) -> Box<Iterator<Item = &Foo>> {
Box::new(myvec.iter())
}
Dies schlägt fehl, da der borrow checker das entsprechende Lebensdauern nicht ableiten kann.
Nach einigen Recherchen habe ich Correct way to return an Iterator? gefunden, was mich + 'a
zum Hinzufügen gebracht:
fn into_iterator<'a>(myvec: &'a Vec<Foo>) -> Box<Iterator<Item = &'a Foo> + 'a> {
Box::new(myvec.iter())
}
Aber ich verstehe nicht
- Was das bedeutet
- Und warum es benötigt hier
Oh natürlich! Ich habe völlig vergessen, dass es nicht um Foo geht, sondern um den Iterator selbst; Ich dachte zuerst, dass die Lebenszeitgrenze auf einer Struktur lag ... Danke, dass du das erklärst! – torkleyy