Perché è necessario aggiungere una durata a un tratto con l’operatore più (Iterator + ‘a) necessario?

Sto applicando una chiusura sull’iteratore e voglio usare stable, quindi voglio restituire un Iterator scatola. Il modo più ovvio per farlo è il seguente:

 struct Foo; fn into_iterator(myvec: &Vec) -> Box<Iterator> { Box::new(myvec.iter()) } 

Ciò non riesce perché il verificatore del prestito non può dedurre le vite appropriate.

Dopo alcune ricerche, ho trovato il modo corretto per restituire un Iterator? , che mi ha portato ad aggiungere + 'a :

 fn into_iterator(myvec: &'a Vec) -> Box<Iterator + 'a> { Box::new(myvec.iter()) } 

Ma non capisco

  • Che cosa fa
  • E perché è necessario qui