J'applique une fermeture sur l'itérateur et je veux utiliser stable, donc je veux retourner une boîte Iterator
. La façon évidente de le faire est la suivante:Pourquoi Box <Iterator <Item = &Foo> + 'a> nécessaire?
struct Foo;
fn into_iterator(myvec: &Vec<Foo>) -> Box<Iterator<Item = &Foo>> {
Box::new(myvec.iter())
}
Cela échoue parce que le vérificateur d'emprunt ne peut pas déduire les durées de vie appropriées.
Après quelques recherches, j'ai trouvé Correct way to return an Iterator?, ce qui m'a amené à ajouter + 'a
:
fn into_iterator<'a>(myvec: &'a Vec<Foo>) -> Box<Iterator<Item = &'a Foo> + 'a> {
Box::new(myvec.iter())
}
Mais je ne comprends pas
- Qu'est-ce que cela ne
- Et pourquoi il est nécessaire ici
Oh bien sûr! J'ai complètement oublié qu'il ne s'agit pas de Foo mais de l'Iterator lui-même; J'ai d'abord pensé que la limite de vie était sur une structure ... Merci d'avoir clarifié ça! – torkleyy