如何获得RefCell到一个对象和Rc到其部分



我需要从一个回调中调用对象上的mut方法,从另一个回调中调用另一个方法(一个计时器和请求动画帧在websm的东西中)从该对象返回的字段。无论我尝试什么,我都得到了各种各样的错误,主要是像"创建一个临时的,在使用时被释放"。这可能吗?

let mut top = Top {
item: Item {}
};
let top_rc_refcell = Rc::new(RefCell::new(top));

let top_rc_1 = Rc::clone(&top_rc_refcell);
let box_1 = Box::new(move || {
top_rc_1.borrow_mut().some_mut();
});
let top_rc_2 = Rc::clone(&top_rc_refcell);
//ref_to_item is costly so calling it from within callback is not an option
let item_rc = Rc::new(&top_rc_2.borrow().ref_to_item());
let item_rc_in_box = Rc::clone(&item_rc);
let box_2 = Box::new(move || {
item_rc_in_box.some();
});
(box_1)();
(box_2)();

错误:

error[E0716]: temporary value dropped while borrowed
--> src/lib.rs:46:28
|
46 |     let item_rc = Rc::new(&top_rc_2.borrow().ref_to_item());
|                            ^^^^^^^^^^^^^^^^^               - temporary value is freed at the end of this statement
|                            |
|                            creates a temporary which is freed while still in use
47 | 
48 |     let item_rc_in_box = Rc::clone(&item_rc);
|                                    -------- borrow later used here
|
= note: consider using a `let` binding to create a longer lived value
error[E0716]: temporary value dropped while borrowed
--> src/lib.rs:46:28
|
46 |     let item_rc = Rc::new(&top_rc_2.borrow().ref_to_item());
|                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
|                            |
|                            creates a temporary which is freed while still in use
47 | 
48 |     let item_rc_in_box = Rc::clone(&item_rc);
|                                    -------- borrow later used here
|
= note: consider using a `let` binding to create a longer lived value
游乐场

不完全是。您不能创建指向该字段的Rc,因为该字段必须以某种方式包装在Rc中。您只能对指向字段的指针这样做,这是非常无用的,也是错误的来源。

您需要将字段声明为Rc或仅使用整个对象Rc

相关内容

最新更新