第 9 章:泛型、Trait 与宏

📅 2026/7/6 23:42:48 👁️ 阅读次数 📝 编程学习
第 9 章:泛型、Trait 与宏

第 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 方法