std::mem::replace - Rust (original) (raw)
Function std::mem::replace1.0.0 [−] [src]
pub fn replace(dest: &mut T, src: T) -> T
Replaces the value at a mutable location with a new one, returning the old value, without deinitializing either one.
A simple example:
use std::mem;
let mut v: Vec = vec![1, 2];
let old_v = mem::replace(&mut v, vec![3, 4, 5]); assert_eq!(2, old_v.len()); assert_eq!(3, v.len());Run
replace
allows consumption of a struct field by replacing it with another value. Without replace
you can run into issues like these:
ⓘThis example deliberately fails to compile
struct Buffer { buf: Vec }
impl Buffer { fn get_and_reset(&mut self) -> Vec {
let buf = self.buf;
self.buf = Vec::new();
buf
}
}Run
Note that T
does not necessarily implement Clone, so it can't even clone and resetself.buf
. But replace
can be used to disassociate the original value of self.buf
fromself
, allowing it to be returned:
use std::mem;
impl Buffer { fn get_and_reset(&mut self) -> Vec { mem::replace(&mut self.buf, Vec::new()) } }Run