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
: 实现迭代器。
下面分别介绍:
#![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)
}
}
}
#![allow(unused)]
fn main() {
#[derive(Debug)]
struct Person {
name: String,
age: u32,
}
}
#![allow(unused)]
fn main() {
#[derive(PartialEq, Eq)]
struct Point {
x: i32,
y: i32,
}
}
#![allow(unused)]
fn main() {
#[derive(PartialOrd, Ord)]
struct Point {
x: i32,
y: i32,
}
}
#![allow(unused)]
fn main() {
#[derive(Clone)]
struct Point {
x: i32,
y: i32,
}
}
#![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,
}
}
}
}
#![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
}
}
}
}