当使用 generational-arena crate 时,是否有任何方式引用 arena 中的实体,然后使用该引用将新值分配给 arena 中其他实体的可变引用?这似乎是您希望您的实体能够做到的。
generational-arena = "0.2.8"
use generational_arena::{Arena};
fn main(){
let mut arena = Arena::new();
// Insert some elements into the arena.
let rza = arena.insert("Robert Fitzgerald Diggs");
let gza = arena.insert("Gary Grice");
let bill = arena.insert("Bill Gates");
//combine rza and gza and assign to bill
let rza_val = arena.get(rza).unwrap();
let gza_val = arena.get(gza).unwrap();
let mut_bill = arena.get_mut(bill).unwrap();
*mut_bill = &format!("{}, {}",*rza_val, *gza_val);
}
答案 0 :(得分:1)
一种简单的方法是使用范围,因此在您再次可变借用之前,不可变借用已经消失:
let new_bill = {
let rza_val = arena.get(rza).unwrap();
let gza_val = arena.get(gza).unwrap();
format!("{}, {}", rza_val, gza_val)
};
let mut_bill = arena.get_mut(bill).unwrap();
*mut_bill = &new_bill;