对 Vec<_> 的可变引用在 while 循环中的寿命不够长
Mutable reference to Vec<_> does not live long enough in while loop
这是目前的代码,相关行是 27 和 28:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=37bba701ad2e9d47741da1149881ddd1
错误信息:
error[E0597]: `neighs` does not live long enough
--> src/lib.rs:28:25
|
17 | while let Some(Reverse(current)) = open.pop() {
| ---------- borrow later used here
...
28 | for neighbor in neighs.iter_mut() {
| ^^^^^^^^^^^^^^^^^ borrowed value does not live long enough
...
38 | }
| - `neighs` dropped here while still borrowed
我过去用过几次 Rust,我完全知道这个问题应该是多么基础。我也花了几个小时尝试不同的事情并用谷歌搜索类似的问题。我似乎无法找到解决方案。如何使 neighs
与功能 a_star
一样长?
我建议:
- 将 Cell 的副本存储在 open 中而不是对 Cell 的引用
open.push(Reverse(start.clone()));
- 将 Cell 结构的父字段设为 Box 或 Rc 而不是引用:
#[derive(Clone, Eq)]
pub struct Cell {
coords: (u32, u32),
g_cost: u32,
h_cost: u32,
parent: Option<std::rc::Rc<Cell>>,
}
这种打开方式不会引用任何元素或当前元素。这将避免生命周期问题。
这是目前的代码,相关行是 27 和 28:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=37bba701ad2e9d47741da1149881ddd1
错误信息:
error[E0597]: `neighs` does not live long enough
--> src/lib.rs:28:25
|
17 | while let Some(Reverse(current)) = open.pop() {
| ---------- borrow later used here
...
28 | for neighbor in neighs.iter_mut() {
| ^^^^^^^^^^^^^^^^^ borrowed value does not live long enough
...
38 | }
| - `neighs` dropped here while still borrowed
我过去用过几次 Rust,我完全知道这个问题应该是多么基础。我也花了几个小时尝试不同的事情并用谷歌搜索类似的问题。我似乎无法找到解决方案。如何使 neighs
与功能 a_star
一样长?
我建议:
- 将 Cell 的副本存储在 open 中而不是对 Cell 的引用
open.push(Reverse(start.clone()));
- 将 Cell 结构的父字段设为 Box 或 Rc 而不是引用:
#[derive(Clone, Eq)]
pub struct Cell {
coords: (u32, u32),
g_cost: u32,
h_cost: u32,
parent: Option<std::rc::Rc<Cell>>,
}
这种打开方式不会引用任何元素或当前元素。这将避免生命周期问题。