如果我理解正确,则不可能在 Rust 中通过a创建可变借用std::rc::Rc
,您必须使用Cell
or RefCell
。但无论如何我无法理解如何使用它们。例如考虑这个简单的例子:
use std::cell::RefCell;
struct X (i32);
impl X {
fn foo(&mut self) {
self.0 = 0;
}
}
fn main () {
let x = X(5);
let rcx = RefCell::new(&x);
let mut mutx: std::cell::RefMut<&X> = rcx.borrow_mut();
(*mutx).foo();
}
我收到以下错误:
16:5: 16:9 error: cannot borrow immutable local variable `mutx` as mutable
16 mutx.foo();
但是,如果我从行中删除引用(并更新类型mutx
):
let rcx = RefCell::new(x);
一切都很好。但我不明白为什么,因为RefMut::deref_mut() -> &mut T
在第 16 行调用的尊重应该&&mut T
在第一种情况下返回,而&mut T
在第二种情况下。但是由于编译器应该*
根据需要应用许多(如果我知道deref coercionRefMut<X>::deref_mut()
是如何工作的),和之间应该没有区别RefMut<&X>::deref_mut()
编辑:错误地我忘了mut
在第 15 行写,因为在链接的例子中是正确的。所以现在是let mut mutx...