Я применяю закрытие на итераторе, и я хочу использовать стабильный, поэтому я хочу вернуть коробку Iterator
. Очевидный способ сделать это состоит в следующем:Почему Box <Итератор <Item = &Foo> + 'a> нужен?
struct Foo;
fn into_iterator(myvec: &Vec<Foo>) -> Box<Iterator<Item = &Foo>> {
Box::new(myvec.iter())
}
Это терпит неудачу, потому что позаимствовать проверки не может вывести соответствующие сроки службы.
После некоторых исследований, я нашел Correct way to return an Iterator?, который привел меня к добавлению + 'a
:
fn into_iterator<'a>(myvec: &'a Vec<Foo>) -> Box<Iterator<Item = &'a Foo> + 'a> {
Box::new(myvec.iter())
}
Но я не понимаю,
- Что это делает
- И почему необходимо здесь
О, конечно! Я совершенно забыл, что речь идет не о Foo, а о самом Итераторе; Сначала я подумал, что привязанность к жизни была построена ... Спасибо, что разъяснил это! – torkleyy