イテレータにクロージャを適用していますので、安定したものを使用したいので、ボックス化されたIterator
を返したいと思います。これを行う明白な方法は次のとおりです。Box <Iterator <Item = &Foo> + 'a>はなぜ必要ですか?
struct Foo;
fn into_iterator(myvec: &Vec<Foo>) -> Box<Iterator<Item = &Foo>> {
Box::new(myvec.iter())
}
これは、借用チェッカーが適切な有効期間を推論できないために失敗します。
いくつかの研究の後、私は+ 'a
を追加することに私をもたらしたCorrect way to return an Iterator?を、見つけた:
fn into_iterator<'a>(myvec: &'a Vec<Foo>) -> Box<Iterator<Item = &'a Foo> + 'a> {
Box::new(myvec.iter())
}
しかし、私は、これは
- を理解していませんここに必要です
もちろん!私はそれがFooについてではなくIteratorそのものではないことを完全に忘れてしまった。私は最初に構造体上の生存時間を考えました...これを明確にしてくれてありがとう! – torkleyy