I noticed that I used this pattern quite a lot this morning:
let mut has_fused = false;
let fuse = move |some_value| {
let was_fused = has_fused;
has_fused = foo(some_value);
was_fused
}
bar(fuse);
This is relatively verbose, and could be nicely be abstracted:
// sorry for the naming, I don't have anything better than `reference`
fn get_and_assign<T>(reference: &mut T, new_value: T) -> T {
let mut new_value = new_value;
swap(reference, &mut new_value);
new_value
}
let mut has_fused = false;
bar(|some_value| get_and_assign(&mut has_fused, foo(some_value));
Is there a similar function to get_and_assign
in std
?