淡若轻风

博客园 首页 新随笔 联系 订阅 管理

这是开发必备、高频使用的 Rust 核心 Trait 速查清单,按用途分类,包含作用、核心方法、使用场景和示例,直接背 / 查即可。

一、基础核心 Trait(必学,编译器自动推导)

1. Debug

  • 作用:为类型提供调试打印能力(println!("{:?}", val))
  • 核心:fmt::Debug 格式化
  • 用法:几乎所有类型都应实现,#[derive(Debug)] 自动生成
#[derive(Debug)]
struct User { name: String }

2. Display

  • 作用:提供用户友好的打印(println!("{}", val))
  • 核心:fmt::Display 格式化
  • 场景:给最终用户展示的类型
impl fmt::Display for User {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "User: {}", self.name)
    }
}

3. Clone

  • 作用:创建深拷贝 / 显式复制,开销明确
  • 核心:fn clone(&self) -> Self
  • 用法:#[derive(Clone)] 自动实现
let a = String::from("hello");
let b = a.clone(); // 显式复制,不转移所有权

4. Copy

  • 作用:标记类型为值类型,赋值时自动复制(无所有权转移)
  • 核心:标记 Trait(无方法)
  • 限制:仅能用于简单栈上类型(如 i32、bool)
  • 用法:#[derive(Copy, Clone)](必须搭配 Clone)

5. Default

  • 作用:提供类型的默认值
  • 核心:fn default() -> Self
  • 场景:初始化空值、配置项
#[derive(Default)]
struct Config { port: u16 }
let cfg = Config::default(); // port = 0

二、比较与相等 Trait(判断、排序必备)

6. PartialEq

  • 作用:部分相等判断(支持 ==、!=)
  • 核心:fn eq(&self, other: &Self) -> bool
  • 用法:#[derive(PartialEq)]

7. Eq

  • 作用:完全相等(满足自反性,是 PartialEq 的子集)
  • 核心:标记 Trait
  • 用法:#[derive(PartialEq, Eq)]

8. PartialOrd

  • 作用:部分比较(支持 <、>、<=、>=)
  • 核心:fn partial_cmp(&self, other: &Self) -> Option<Ordering>
  • 场景:可比较但非全序的类型(如浮点数)

9. Ord

  • 作用:全序比较(可排序)
  • 核心:fn cmp(&self, other: &Self) -> Ordering
  • 场景:排序、二叉树、BTreeMap 键
  • 用法:#[derive(PartialOrd, Ord)]

三、迭代器 Trait(遍历数据核心)

10. Iterator

  • 作用:迭代遍历集合(for 循环底层)
  • 核心:fn next(&mut self) -> Option<Self::Item>
  • 自带方法:map、filter、collect、for_each 等 50+
let v = vec![1,2,3];
for i in v.iter() {} // 底层就是 Iterator

11. IntoIterator

  • 作用:将类型转为迭代器
  • 核心:fn into_iter(self) -> Self::IntoIter
  • 场景:让自定义类型支持 for 循环直接遍历

四、类型转换 Trait

12. From

  • 作用:值转换(消费输入,无失败)
  • 核心:fn from(T) -> Self
  • 优势:自动实现 Into,可读性强
let s = String::from("hello");
let i = i32::from(1u8);

13. Into

  • 作用:值转换(被 From 自动实现)
  • 核心:fn into(self) -> U
  • 场景:链式调用、方法参数转换
let s: String = "hello".into();

14. TryFrom / TryInto

  • 作用:可能失败的转换(返回 Result)
  • 核心:fn try_from(T) -> Result<Self, Error>
  • 场景:大数转小数、字符串转数字
let i: Result<i8, _> = 200u8.try_into(); // 失败返回 Err

15. AsRef

  • 作用:借用转换(不消费所有权,零开销)
  • 核心:fn as_ref(&self) -> &T
  • 场景:函数参数通用化(接受 String/&str)
fn print(s: impl AsRef<str>) { println!("{}", s.as_ref()); }

16. AsMut

  • 作用:可变借用转换
  • 核心:fn as_mut(&mut self) -> &mut T

五、资源管理与错误处理 Trait

17. Drop

  • 作用:资源释放(离开作用域自动调用)
  • 核心:fn drop(&mut self)
  • 场景:关闭文件、释放锁、清理内存

18. Deref

  • 作用:解引用(支持 *val)
  • 核心:fn deref(&self) -> &Self::Target
  • 场景:智能指针(Box、String、Vec)自动解引用

19. DerefMut

  • 作用:可变解引用
  • 核心:fn deref_mut(&mut self) -> &mut Self::Target

六、错误处理 Trait

20. Error

  • 作用:自定义错误类型标准
  • 核心:source()(获取底层错误)、to_string()
  • 用法:配合 thiserror 库自动实现
#[derive(Debug, thiserror::Error)]
enum MyError {
    #[error("IO error: {0}")]
    Io(#[from] std::io::Error),
}

快速记忆表(极简版)

image

 

posted on 2026-05-30 18:06  淡若轻风  阅读(32)  评论(0)    收藏  举报