Iterator restituisce gli articoli per riferimento, problema di durata

Ho un problema a vita , sto cercando di implementare un iteratore che restituisce i suoi articoli per riferimento, ecco il codice:

struct Foo { d: [u8; 42], pos: usize } impl Iterator for Foo { fn next(&'a mut self) -> Option { let r = self.d.get(self.pos); if r.is_some() { self.pos += 1; } r } } fn main() { let mut x = Foo { d: [1; 42], pos: 0 }; for i in x { println!("{}", i); } } 

Tuttavia questo codice non viene compilato correttamente, ricevo un problema relativo alla durata dei parametri, ecco l’errore corrispondente:

 $ rustc test.rs test.rs:8:5: 14:6 error: method `next` has an incompatible type for trait: expected concrete lifetime, but found bound lifetime parameter test.rs:8 fn next(&'a mut self) -> Option { test.rs:9 let r = self.d.get(self.pos); test.rs:10 if r.is_some() { test.rs:11 self.pos += 1; test.rs:12 } test.rs:13 r ... test.rs:8:49: 14:6 note: expected concrete lifetime is the lifetime 'a as defined on the block at 8:48 test.rs:8 fn next(&'a mut self) -> Option { test.rs:9 let r = self.d.get(self.pos); test.rs:10 if r.is_some() { test.rs:11 self.pos += 1; test.rs:12 } test.rs:13 r ... error: aborting due to previous error 

Qualcuno ha un’idea su come risolvere questo problema e ancora restituire gli articoli per riferimento?

Almeno, cosa significa questo messaggio: durata del ciclo di vita prevista, ma parametro di durata limite stabilito ?