我在迭代器上應用閉包,我想使用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