【发布时间】:2016-10-20 22:43:21
【问题描述】:
我正在 rust 中实现一个就地递归解析器,但我遇到了一些借用错误。代码sn -p 重现了这个问题,虽然不是很有用
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 |让 mut last : &mut Box = my_vec.last_mut().unwrap(); | ------ 第一个可变借用发生在这里 19 |让 mut new_borrow = Box::new(MyBorrows::new(last.val)); 20 | my_vec.push(new_borrow); | ^^^^^^ 第二个可变借用发生在这里 21 | } 22 | } | - 第一次借到这里 错误:由于 3 个先前的错误而中止在我的真实案例中,向量被用作堆栈来引用我正在解析的struct 越来越深的组件。这是我在 C++ 中用于通用解析的常见模式,我试图在 Rust 中复制它,但我遇到了问题。任何帮助将不胜感激。
【问题讨论】:
标签: rust