引用 Arena,然后在 Arena 内改变值

时间:2021-07-14 03:03:24

标签: rust

当使用 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);
}

1 个答案:

答案 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;
相关问题