Rust笔记 - Deref and DerefMut trait

513 阅读1分钟

在Rust中实现了Deref 和 DerefMut 就可以使类型表现得像指针一样,可以使用 * 和 .操作符。下面看一下定义:

trait Deref {
    type Target: ?Sized;
    fn deref(&self) -> &Self::Target;
}

trait DerefMut: Deref {
    fn deref_mut(&mut self) -> &mut Self::Target;
}

下面就简单实现:

use std::ops::DerefMut;

struct Any<T>(T);
impl<T> Any<T> {
    fn new(x: T) -> Any<T> {
        Any(x)
    }
}

impl<T> std::ops::Deref for Any<T> {
    type Target = T;
    fn deref(&self) -> &T {
        &self.0
    }
}

impl<T> DerefMut for Any<T> {
    fn deref_mut(&mut self) -> &mut T {
        &mut self.0
    }
}

fn main() {
    let mut y = Any::new(1);
    *y = 5;
    assert_eq!(y.0, 5);
}