I would like to modify the variable via a closure.
Then I get the error.
error[E0499]: cannot borrow `tr` as mutable more than once at a time
--> src\main.rs:34:17
|
31 | let mut c = Changers::new(&mut tr);
| ------- first mutable borrow occurs here
...
34 | let mut f = || {
| ^^ second mutable borrow occurs here
35 | let base = c.call_index();
| - first borrow later captured here by closure
36 | tr.set_index(base + index);
| -- second borrow occurs due to use of `tr` in closure
error: aborting due to previous error
How can I resolve this problem?
Code is as the following:
#[derive(Default)]
pub struct ProgressTracker {
index: u64,
}
impl ProgressTracker {
fn get_index(&self) -> u64 {
self.index
}
pub fn set_index(&mut self, index: u64) {
self.index = index
}
}
pub struct Changers<'a> {
tracker: &'a ProgressTracker,
}
impl Changers<'_> {
pub fn new(tracker: &ProgressTracker) -> Changers {
Changers { tracker }
}
pub fn call_index(&mut self) -> u64 {
self.tracker.get_index()
}
}
fn main() {
let mut tr = ProgressTracker::default();
let mut c = Changers::new(&mut tr);
let mut index = 0;
let mut f = || {
let base = c.call_index();
tr.set_index(base + index);
index += 1;
};
for _ in 0..5 {
f();
}
}
I expect that tr.set_index(base + index);
will effect to c
.