看起来如果你借用了一个结构体字段的引用,整个结构体就会被认为是被借用的。我已经成功地分离出了一个我想要做的事情的示例。我只想得到对B
中一个字段的“只读”引用,以获取一些数据,然后修改B
的另一个字段。有没有一种符合Rust语言惯例的方法可以实现这个?
struct A {
i: i32,
}
struct B {
j: i32,
a: Box<A>,
}
impl B {
fn get<'a>(&'a mut self) -> &'a A {
&*self.a
}
fn set(&mut self, j: i32) {
self.j = j
}
}
fn foo(a: &A) -> i32 {
a.i + 1
}
fn main() {
let a = Box::new(A { i: 47 });
let mut b = B { a: a, j: 1 };
let a_ref = b.get();
b.set(foo(a_ref));
}
error[E0499]: cannot borrow `b` as mutable more than once at a time
--> src/main.rs:27:5
|
26 | let a_ref = b.get();
| - first mutable borrow occurs here
27 | b.set(foo(a_ref));
| ^ second mutable borrow occurs here
28 | }
| - first borrow ends here
b.get
到期,然后我们再尝试set
该值——这与“b
将保持借用状态 直到此引用超出作用域为止”的观点密切相关。 - Shepmaster