我很难使用借用检查器。
for item in self.xxx.iter() {
self.modify_self_but_not_xxx(item);
}
上面的代码在我将一些代码重构为 modify_self_but_not_xxx()
之前有效:
error: cannot borrow `*self` as mutable because `self.xxx` is also borrowed as immutable
如何在持有对self
的引用时调用突变方法(例如,从 for
循环中(?
如何在持有对
self
的引用时调用突变方法(例如,从for
循环中(?
你不能,这正是借款规则所阻止的。
主要思想是,在您的代码中,借用检查器不可能知道self.modify_self_but_not_xxx(..)
不会修改xxx
。
但是,您可以更改self.yyy
或任何其他参数,因此您可以:
- 直接在循环体中计算
modify_self_but_not_xxx(..)
-
定义一个执行可变引用的帮助程序函数来更新它们:
fn do_computations(item: Foo, a: &mut Bar, b: &mut Baz) { /* ... */ } /* ... */ for item in self.xxx.iter() { do_computations(item, &mut self.bar, &mut self.baz); }
- 定义具有帮助程序方法的帮助程序结构