私は錆のある場所で再帰的なパーサーを実装していますが、いくつかの借用エラーが発生しています。それはこれが私に次のエラー与え複数の借用のエラーを借用
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);
}
}
非常に有用ではありませんが、コードスニペットは、問題を再現:私の本当の場合
error[E0499]: cannot borrow `my_vec` as mutable more than once at a time --> test.rs:20:9 | 18 | let mut last : &mut Box = my_vec.last_mut().unwrap(); | ------ first mutable borrow occurs here 19 | let mut new_borrow = Box::new(MyBorrows::new(last.val)); 20 | my_vec.push(new_borrow); | ^^^^^^ second mutable borrow occurs here 21 | } 22 | } | - first borrow ends here error: aborting due to 3 previous errors
を、ベクトルは深く深くを参照するために、スタックとして使用されていますstruct
のコンポーネント私は解析しています。これは私がRustで複製しようとしているC++の一般的な解析に使用する一般的なパターンですが、問題があります。どんな助けもありがとう。