I'm having a hard time with the borrow checker.
for item in self.xxx.iter() {
self.modify_self_but_not_xxx(item);
}
The above code worked before I refactored some code into modify_self_but_not_xxx()
:
error: cannot borrow `*self` as mutable because `self.xxx` is also borrowed as immutable
How can I call a mutating method while holding a reference to self
(e.g. from within a for
-loop)?
How can I call a mutating method while holding a reference to
self
(e.g. from within afor
-loop)?
You can't, that's exactly what the borrowing rules prevent.
The main idea is that in your code, the borrow checker cannot possibly know that self.modify_self_but_not_xxx(..)
will not modify xxx
.
However, you can mutate self.yyy
or any other parameters, so either you can:
modify_self_but_not_xxx(..)
directly in your loop bodydefine a helper function taking mutable references to update them:
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With