我在迭代器上应用闭包,我想使用stable,所以我想返回一个盒装Iterator
。显而易见的方法如下:为什么Box <Iterator <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