解引用

借用也可以被称为引用。 以let b = &a 形式呈现。

解引用即 *b

在Rust中解引用是一种可重载的运算。

Trait std::ops::Deref

只要实现Deref就可以重载`*`运算符。

use std::ops::Deref;

struct DerefExample<T> {
    value: T
}

impl<T> Deref for DerefExample<T> {
    type Target = T;

    fn deref(&self) -> &T {
        &self.value
    }
}

let x = DerefExample { value: 'a' };
assert_eq!('a', *x);

Trait stdops::DerefMut

use std::ops::{Deref, DerefMut};

struct DerefMutExample<T> {
    value: T
}

impl<T> Deref for DerefMutExample<T> {
    type Target = T;

    fn deref(&self) -> &T {
        &self.value
    }
}

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

let mut x = DerefMutExample { value: 'a' };
*x = 'b';
assert_eq!('b', *x);

results matching ""

    No results matching ""