0

我有一个结构体,它的字段引用了同一结构体中数组上的当前元素,使用Rc. 我现在可以引用 thennums字段中的任何元素:

use std::{cell::RefCell, rc::Rc};

struct ArrayTest {
    nums: [u32; 8],
    cur_num: Rc<RefCell<Option<u32>>>,
}

fn main() {
    let mut slice = ArrayTest {
        nums: [1, 2, 3, 4, 5, 6, 7, 8],
        cur_num: Rc::new(RefCell::new(None)),
    };

    slice.cur_num = Rc::new(RefCell::new(Some(1)));
    let ref mut t = slice.nums[3];
    slice.cur_num = Rc::new(RefCell::new(Some(*t)));

    println!("{:?}", slice.cur_num);
    if let Some(ref mut t) = *slice.cur_num.borrow_mut() {
        *t += 1;
    };
    println!("{:?}", slice.cur_num);
    println!("{:?}", slice.nums);
}

操场

当我尝试修改时出现问题cur_num,因为我希望它在nums数组上反映它的值。每当我尝试通过取消引用它来做到这一点时,它似乎只会改变cur_num.

RefCell { value: Some(4) }
RefCell { value: Some(5) }
[1, 2, 3, 4, 5, 6, 7, 8]

为什么我不能在同一个结构中存储一个值和对该值的引用?是关于将值存储在同一个结构中的另一个主题,但答案没有显示可以移动值的情况,或者RefCell.

有没有办法修改它,RefCell以便我可以修改参考?

4

0 回答 0