2016-09-07 37 views
0

私のようなアルゴリズムを持っている:有効期限

let seed: Foo = ... 
let mut stack: Vec<&Foo> = Vec::new(); 
stack.push(&seed); 
while let Some(next) = stack.pop { 
    let more_foos: Vec<Foo> = some_function_of(next) // 0 to many Foos returned 
    for foo in more_foos { 
     stack.push(&foo); 
    } 
} 

を私はfooが十分に長く住んでいないというエラーが表示されます。これは、stackの寿命が長いためと思われます。これをどうすれば解決できますか?

答えて

3

more_foosであり、ループの各繰り返しの最後にその内容が破棄される。しかし、more_foosのアイテムへの参照をstackに保存しようとしていますが、これは無効なので、ポインタが絡んでいる可能性があります。

代わりにstack自身のFooオブジェクトを作成する必要があります。

fn main() { 
    let seed: Foo = unimplemented!(); 
    let mut stack: Vec<Foo> = Vec::new(); 
    stack.push(seed); 
    while let Some(next) = stack.pop() { 
     let more_foos: Vec<Foo> = unimplemented!(); 
     for foo in more_foos { 
      stack.push(foo); 
     } 
    } 
} 

注:

少しより効率的かもしれません
 stack.extend(more_foos); 

forループに置き換えることができます。