上一篇:Rust系列(三) 類型系統(tǒng)與trait
基于官方文檔進行簡單學習記錄,保證所有示例是可運行的基本單元。測試
rust
程序除了使用官方的playground
之外,還可以通過定義[[example]]
來運行程序。
1. Deref
用于不可變對象的解引用操作,語法類似*v
。
官方文檔:https://doc.rust-lang.org/std/ops/trait.Deref.html
trait源碼
pub trait Deref {
type Target: ?Sized;
// Required method
fn deref(&self) -> &Self::Target;
}
備注:Deref
和 DerefMut
設計之初就是為了適配和簡化智能指針而設計的,應該避免為非智能指針實現(xiàn)相關trait
,以造成混淆。
Deref coercion
假設類型T
實現(xiàn)了Deref<Target = U>
trait,有一個類型為T
的變量x
,有下面幾條規(guī)則成立:
-
*x
等價于*Deref::deref(&x)
- 類型
T
必須實現(xiàn)所有類型U
的不可變方法
應用示例文章來源地址http://www.zghlxwxcb.cn/news/detail-620707.html
use std::ops::Deref;
struct DerefExample<T> {
value: T,
}
impl<T> Deref for DerefExample<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.value
}
}
fn main() {
let x: DerefExample::<char> = DerefExample { value: 'a' };
let target: char = *x;
// a a
println!("{} {}", target, 'a');
}
2. DerefMut
用于可變對象的解引用操作,語法類似*v = 1
。
官方文檔:https://doc.rust-lang.org/std/ops/trait.DerefMut.html
trait源碼
pub trait DerefMut: Deref {
// Required method
fn deref_mut(&mut self) -> &mut Self::Target;
}
DerefMut coercion
假設類型T
實現(xiàn)了DerefMut<Target = U>
trait,有一個類型為T
的變量x
,有下面幾條規(guī)則成立:文章來源:http://www.zghlxwxcb.cn/news/detail-620707.html
-
*x
等價于*DerefMut::deref_mut(&mut x)
- 類型
T
必須實現(xiàn)所有類型U
的可變和不可變方法
應用示例
use std::ops::{Deref, DerefMut};
struct DerefMutExample<T> {
value: T,
}
impl<T> Deref for DerefMutExample<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.value
}
}
impl<T> DerefMut for DerefMutExample<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.value
}
}
fn main() {
let mut x: DerefMutExample::<char> = DerefMutExample { value: 'a' };
// a a
println!("{} {}", *x, 'a');
*x = 'b';
// b a
println!("{} {}", *x, 'a');
}
到了這里,關于Rust系列(四) trait備忘錄(持續(xù)更新)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!