Реализовать chain() для GATified Lending Iterator

Я пытаюсь реализовать Iterator::chain()-подобную операцию для итератора GATified:

#![feature(generic_associated_types)]

pub trait LendingIterator {
    type Item<'a> where Self: 'a;

    fn next(&mut self) -> Option<Self::Item<'_>>;
}

Для этого, как и в случае с обычным Iterator::chain(), мне нужна структура Chain, которая содержит два итератора в цепочке и реализацию LendingIterator.

У меня проблема в том, что мне нужно указать типы итераторов A и B, имеющие соответствующие Item общие связанные типы, поэтому я попробовал это:

pub struct Chain<A, B> {
    a: Option<A>,
    b: Option<B>,
}

impl<A, B> LendingIterator for Chain<A, B>
    where
        A: LendingIterator,
        B: for<'a> LendingIterator<Item<'a>=A::Item<'a>>
{
    type Item<'a> where Self: 'a = A::Item<'a>;

    fn next(&mut self) -> Option<Self::Item<'_>> {
        todo!()
    }
}

Но я получаю:

error[E0311]: the parameter type `B` may not live long enough
  --> src\lib.rs:63:12
   |
63 | impl<A, B> LendingIterator for Chain<A, B> where A: LendingIterator, B: for<'a> LendingIterator<Item<'a>=A::Item<'a>> {
   |         -  ^^^^^^^^^^^^^^^ ...so that the type `B` will meet its required lifetime bounds...
   |         |
   |         help: consider adding an explicit lifetime bound...: `B: 'a`
   |
note: ...that is required by this bound
   |        ^^^^ ...so that the type `B` will meet its required lifetime bounds

Конечно, предложения компилятора не работают.

Как я могу добавить ограничение, что B имеет достаточно долгое время жизни?

Придирка: вы можете сделать fn next(&mut self) -> Option<Self::Item<'_>>;

Chayim Friedman 17.03.2022 11:46

Срок службы 'b не определен — вы имели в виду 'a?

Chayim Friedman 17.03.2022 11:50
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
7
2
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Другие вопросы по теме