struct Person<T> {
letter: Letter<T>
}
struct Letter<T> {
words: [Option<T>; 5]
}
struct EditIter<'a, T: 'a> {
letter: &'a mut Letter<T>
}
impl<'a, T: 'a> Iterator for EditIter<'a, T> {
type Item = Mode<'a, T>;
fn next(&mut self) -> Option<Self::Item> {
/* ... */
Some(Mode::Editing(self.letter))
}
}
enum Mode<'a, T: 'a> {
Editing(&'a Letter<T>),
Speaking(&'a Letter<T>)
}
Fehler:Lebensdauer in Iterator: fn nächste (& 'ein mut selbst)
src/temp.rs:16:28: 16:39 error: cannot infer an appropriate lifetime for automatic coercion due to conflicting requirements [E0495]
src/temp.rs:16 Some(Mode::Editing(self.letter))
^~~~~~~~~~~
src/temp.rs:14:5: 17:6 help: consider using an explicit lifetime parameter as shown: fn next(&'a mut self) -> Option<Self::Item>
src/temp.rs:14 fn next(&mut self) -> Option<Self::Item> {
src/temp.rs:15 /* ... */
src/temp.rs:16 Some(Mode::Editing(self.letter))
src/temp.rs:17 }
Person
Eigentümerin der Letter
, Person
Transfers ein veränderliches borrow von Letter
zu EditIter
schafft EditIter
eine Mode
mit dem geliehenen Letter
und sendet es. Wenn Sie das Merkmal Iterator
entfernen und wie in der Fehlermeldung beschrieben, funktioniert es, aber das würde nicht die Iterator
Eigenschaft implementieren.
Wie kann ich die Logik speichern und den Fehler beheben?
** 'EditIter' sollte die' Letter' ändern können. (zB 'words'). **' Mode' - Komponente der externen API. Der "Brief" hat einige öffentliche Methoden. – nujemid
@nujemid Ich bin mir nicht sicher, was ich dir sagen soll. Basierend auf dem [MCVE] (/ help/mcve) und beschreibendem Text, den Sie in der Frage angegeben haben, kompiliert der Code und läuft mit den Änderungen, die ich gemacht habe. – Shepmaster
Aber verlorene Logik. – nujemid