"&"引用,因此它引用的数据不能作为可变数据借用



下面是我的代码:

pub struct Scope<'a> {
pub parent: Option<Box<Scope<'a>>>,
pub vars: HashMap<&'a str, Value>,
}
impl<'a> Scope<'a> {
pub fn update(&mut self, name: &'a str, v: Value) -> Option<String> {
if self.vars.contains_key(name) {
self.vars.remove(name);
self.vars.insert(name, v);
None
} else {
if let Some(parent) = &self.parent {
parent.update(name, v) // error here
} else {
Some(format!("{} is undefined", name))
}
}
}
}

下面是我从编译器得到的错误信息:

error[E0596]: cannot borrow `**parent` as mutable, as it is behind a `&` reference
--> src/interpreter/scope.rs:34:17
|
34 |                 parent.update(name, v)
|                 ^^^^^^^^^^^^^^^^^^^^^^ `parent` is a `&` reference, so the data it refers to cannot be borrowed as mutable

我将let Some(parent) == &self.parent更改为let mut Some(parent) == &self.parent,但编译器抛出语法错误。如何修复此错误?

通过使用&来借用共享引用,但是您不能改变共享引用背后的任何东西(除了UnsafeCell中的东西,但这里无关紧要)。为了能够变异,你必须使用&mut而不是&的可变引用:

if let Some(parent) = &mut self.parent {

最新更新