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