3.10.3 常见的trait
Rust 常见的 trait 包括:
std::fmt::Display
: 格式化打印用户友好字符串。std::fmt::Debug
: 格式化打印调试字符串。std::cmp::PartialEq
: 比较值相等。std::cmp::PartialOrd
: 比较值顺序。std::cmp::Eq
: 类型完全相等关系。std::cmp::Ord
: 类型完全顺序关系。std::clone::Clone
: 创建类型副本。std::ops::Add
: 定义加法操作。std::ops::Mul
: 定义乘法操作。std::iter::Iterator
: 实现迭代器。
下面分别介绍:
1. std::fmt::Display:
#![allow(unused)] fn main() { use std::fmt; struct Person { name: String, age: u32, } impl fmt::Display for Person { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{} ({} years)", self.name, self.age) } } }
2. std::fmt::Debug:
#![allow(unused)] fn main() { #[derive(Debug)] struct Person { name: String, age: u32, } }
3. std::cmp::PartialEq 和 std::cmp::Eq:
#![allow(unused)] fn main() { #[derive(PartialEq, Eq)] struct Point { x: i32, y: i32, } }
4. std::cmp::PartialOrd 和 std::cmp::Ord:
#![allow(unused)] fn main() { #[derive(PartialOrd, Ord)] struct Point { x: i32, y: i32, } }
5. std::clone::Clone:
#![allow(unused)] fn main() { #[derive(Clone)] struct Point { x: i32, y: i32, } }
6. std::ops::Add:
#![allow(unused)] fn main() { use std::ops::Add; struct Point { x: i32, y: i32, } impl Add for Point { type Output = Point; fn add(self, other: Point) -> Point { Point { x: self.x + other.x, y: self.y + other.y, } } } }
7. std::iter::Iterator:
#![allow(unused)] fn main() { struct Counter { count: u32, } impl Iterator for Counter { type Item = u32; fn next(&mut self) -> Option<Self::Item> { self.count += 1; if self.count < 6 { Some(self.count) } else { None } } } }