3
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>)
}
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
がLetter
を所有している、Person
は、EditIter
にLetter
の可変ボローを転送EditIter
は借りたとMode
を作成しますLetter
を送信します。 Iterator
の特性を削除してエラーメッセージに記載されているようにすると機能しますが、これはIterator
特性を実装しません。
ロジックを保存してエラーを修正するにはどうすればよいですか?
** 'EditIter'は' Letter'を変更することができるはずです。 (例えば 'words')**' Mode' - 外部APIのコンポーネント。 'Letter'にはいくつかのパブリックメソッドがあります。 – nujemid
@nujemidあなたに何を伝えるべきか分かりません。質問に記入した[MCVE](/ help/mcve)と説明文に基づいて、コードは私が行った変更でコンパイルして実行します。 – Shepmaster
しかし、セットロジックが失われました。 – nujemid