【发布时间】:2020-09-25 19:07:51
【问题描述】:
我有以下代码(只是一个例子)不能满足借用检查器。
一种方法修改struct 的一个字段并调用另一种方法来修改另一个。问题是在调用第二种方法时,它需要一个依赖于结构的参数。对 second 方法的调用不适用于参数 &self.a 和 &mut self.a,因为这将是第二个可变借用。
最后,我将所有代码都用一种方法解决了,但这太难看了(在我的真正问题中)。
如何解决? (我知道参数&self.a 不是必需的,但这不是我要说明的重点……)
struct ABC {
a: Vec<i32>, // no Copy trait
b: i32,
}
impl ABC {
fn new() -> ABC { ABC {a: vec![0,1], b: 10} }
fn first(&mut self) {
self.a.push(2); // updates one field
self.second(&self.a); // uses a method to update the other field
}
fn second(&mut self, x: &Vec<i32>) {
self.b += x[1];
}
}
fn main() {
let mut s = ABC::new();
s.first();
}
【问题讨论】:
-
如果您只想封装该部分,可以将其设为辅助函数
fn second(y: &mut i32, x: &Vec<i32>)。
标签: rust borrow-checker