我在借阅检查器上遇到了困难。
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
- 循环内)?
答案 0 :(得分:7)
如何在保持对
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);
}