Function replace_with::replace_with
source · Expand description
Temporarily takes ownership of a value at a mutable location, and replace it with a new value based on the old one.
We move out of the reference temporarily, to apply a closure f
, returning a new value, which
is then placed at the original value’s location.
An important note
On panic (or to be more precise, unwinding) of the closure f
, default
will be called to
provide a replacement value. default
should not panic – doing so will constitute a double
panic and will most likely abort the process.
Example
enum States {
A(String),
B(String),
}
impl States {
fn poll(&mut self) {
replace_with(
self,
|| States::A(String::new()),
|self_| match self_ {
States::A(a) => States::B(a),
States::B(a) => States::A(a),
},
);
}
}