Ho creato un esempio minimale che illustra un problema di inferenza di tipo che non sono riuscito a risolvere.annotazioni di tipo richieste nel contesto di tipi associati e iteratori
trait A<'a> {
type Item: Copy;
type Iter: Iterator<Item=Self::Item>;
fn items(&'a self) -> Self::Iter;
fn consume(&'a self, i: Self::Item) -> Self::Item;
fn f(&'a self) {
let _ = self.items().map(|i| self.consume(i) as Self::Item);
}
}
L'errore del compilatore è
x.rs:10:30: 10:68 error: type annotations required: cannot resolve `<<Self as A<'_>>::Iter as core::iter::Iterator>::Item == _` [E0284]
x.rs:10 let _ = self.items().map(|i| self.consume(i) as Self::Item);
Ho guardato altre domande su che richiedono le annotazioni di tipo, ma questo sembra essere un caso particolare che coinvolge tipi associati.
Avete bisogno del 'a' 'nel vostro caso reale ? Rimuovendolo e consentendo l'inferenza a vita, il codice viene compilato. – Shepmaster
Sì, ho bisogno della vita. Il mio codice funzionava senza vita, ma devo aggiungerlo, quindi compilare il codice per la ragione per cui ho posto la domanda. Grazie per l'aiuto. – malbarbo