我正在使用Rust实现一种就地递归解析器,并且我遇到了一些借用错误。下面的代码片段复现了这个问题,虽然它不是很有用。
use std::vec::Vec;
struct MyBorrows<'a> {
val : &'a mut i32
}
impl <'a> MyBorrows<'a> {
fn new(v : &'a mut i32) -> MyBorrows<'a> {
MyBorrows { val : v }
}
}
fn main() {
let mut my_val = 23;
let mut my_vec : Vec<Box<MyBorrows>> = Vec::new();
my_vec.push(Box::new(MyBorrows::new(&mut my_val)));
for i in [1..4].iter() {
let mut last : &mut Box<MyBorrows> = my_vec.last_mut().unwrap();
let mut new_borrow = Box::new(MyBorrows::new(last.val));
my_vec.push(new_borrow);
}
}
这给了我以下错误:
错误[E0499]:一次不能将`my_vec`借为多个可变引用 --> test.rs:20:9 | 18 | let mut last : &mut Box = my_vec.last_mut().unwrap(); | ------ 第一次可变借用从这里开始 19 | let mut new_borrow = Box::new(MyBorrows::new(last.val)); 20 | my_vec.push(new_borrow); | ^^^^^^ 第二次可变借用从这里开始 21 | } 22 | } | - 第一次借用在这里结束
错误:由于之前的3个错误而中止
在我的实际情况中,这个向量被用作一个堆栈,以引用越来越深的
struct
组件。这是我在C++中用于通用解析的常见模式,我正在尝试在Rust中复制它,但我遇到了问题。任何帮助都将不胜感激。