解引用
借用也可以被称为引用。 以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);