第 9 章:泛型、Trait 与宏

第 9 章:泛型、Trait 与宏

9.1 泛型基础

泛型允许编写可重用代码。

fn largest<T: PartialOrd>(list: &[T]) -> &T {
    let mut largest = &list[0];
    for item in list.iter() {
        if item > largest {
            largest = item;
        }
    }
    largest
}
  • 使用 T 表示类型参数
  • PartialOrd 是类型约束

9.2 Trait 定义与实现

Trait 是行为抽象。

trait Summary {
    fn summarize(&self) -> String;
}

struct NewsArticle {
    headline: String,
}

impl Summary for NewsArticle {
    fn summarize(&self) -> String {
        format!("{}", self.headline)
    }
}
  • Trait 可以定义默认方法
  • 多个类型可以实现相同 Trait

9.3 常用标准 Trait

  • Display:用户友好输出
  • Debug:调试格式
  • Clone:显式复制
  • Into / From:类型转换
impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}

9.4 宏基础

macro_rules!

macro_rules! create_function {
    ($func_name:ident) => {
        fn $func_name() {
            println!("Function {:?} called", stringify!($func_name));
        }
    };
}

create_function!(foo);
  • macro_rules! 用于定义声明宏
  • 宏是编译时代码生成工具

9.5 过程宏概念

过程宏可以生成更复杂代码,例如 derive 宏。

  • #[derive(Debug)]
  • #[derive(Serialize, Deserialize)]

9.6 练习

  • 为自定义结构体实现 Display
  • 编写一个泛型函数处理不同类型的集合
  • 创建一个简单宏,生成 getter 方法
posted on 2026-05-09 22:02  小樊童鞋  阅读(4)  评论(0)    收藏  举报