Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何在结构中使用选项类型获得对QCell的可变访问_Rust - Fatal编程技术网

Rust 如何在结构中使用选项类型获得对QCell的可变访问

Rust 如何在结构中使用选项类型获得对QCell的可变访问,rust,Rust,我用的是板条箱。我有一个struct MyStruct,其中有一个选项。现在我想获得对内部QCell的可变访问权。代码如下: #[derive(Default)] struct MyStruct { pub val: i32, pub item: Option<Rc<QCell<MyStruct>>> } fn main() { let mut owner = QCellOwner::new(); let struct1 =

我用的是板条箱。我有一个
struct MyStruct
,其中有一个
选项
。现在我想获得对内部
QCell
的可变访问权。代码如下:

#[derive(Default)]
struct MyStruct {
    pub val: i32,
    pub item: Option<Rc<QCell<MyStruct>>>
}

fn main() {
    let mut owner = QCellOwner::new();
    let struct1 = Rc::new(QCell::new(&owner, MyStruct { ..Default::default() }));
    let struct2 = Rc::new(QCell::new(&owner, MyStruct { ..Default::default() }));

    // Point struct2 from struct1.item
    owner.rw(struct1.borrow()).item = Some(Rc::clone(&struct2));

    // Get a mutable access to struct2 from struct1.item
    if let Some(v) = &owner.rw(struct1.borrow()).item {
        owner.rw(v.borrow()).val = 123;
    }
}
如何从
struct1.item
设置
struct2
val

error[E0499]: cannot borrow `owner` as mutable more than once at a time
  --> src/main.rs:xx:x
   |
xx |     if let Some(v) = &owner.rw(struct1.borrow()).item {
   |                       ----- first mutable borrow occurs here
xx |         owner.rw(v.borrow()).val = 123;
   |         ^^^^^    - first borrow later used here
   |         |
   |         second mutable borrow occurs here