泛型与 Trait

泛型让函数与类型对多种具体类型复用;trait 描述「具备的接口」,约束泛型参数能做什么。二者与 生命周期错误处理?From)紧密相关。


泛型函数与结构体

fn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
struct Pair<T> { a: T, b: T }
  • 类型参数可多个:K, V 等。
  • trait 约束T: Debug + Clone,或 where 分行写,提高可读性。

trait 定义与实现

trait Describe {
    fn describe(&self) -> String;
}
impl Describe for User { ... }
  • 默认方法trait 内可提供带主体的函数。
  • 关联类型 type Item关联常量等用于迭代器等复杂 trait。

impl Traitdyn Trait

写法含义
fn f() -> impl Iterator<Item = u8>静态分发,返回某实现者(具体类型由编译器推断)
fn g() -> Box<dyn Iterator<Item = u8>>动态分发,运行时查虚表,需 对象安全(object safe)

常用标准库 trait(节选)

Trait作用
Clone / Copy复制语义,见 所有权
Drop析构
Debug / Display格式化输出
Default默认值
Send / Sync线程边界,见 并发
Iteratorfor 循环与适配器链
From / Into / TryFrom类型转换与 错误处理

#[derive(...)] 可自动实现部分 trait。


孤儿规则(orphan rule)

trait 与类型至少有一个在当前 crate 定义时,才能写 impl Trait for Type,避免随意给外部类型加外部 trait。


相关链接