mem::take() 函数
与 mem::swap() 类似, 但是使用默认值 T::default() 来替换.
该函数接口声明如下:
pub fn take<T: Default>(dest: &mut T) -> T;
看一个示例程序:
use std::mem;
#[derive(Debug, Default)]
struct Point {
x: f32,
y: f32,
}
fn main() {
let mut p = Point { x: 3.0, y: 4.0 };
let old_p = mem::take(&mut p);
assert_eq!(old_p.x, 3.0);
assert_eq!(p.x, 0.0);
assert_eq!(p.y, 0.0);
}
take() 函数的实现
这个函数非常简单, 它直接调用的 replace() 函数:
#[inline]
pub fn take<T: Default>(dest: &mut T) -> T {
replace(dest, T::default())
}