目录

  1. 什么是 Rust 泛型与特性
  2. 为什么要使用泛型与特性
  3. 泛型的基本用法
  4. 特性的定义与实现
  5. 泛型与特性的结合
  6. 代码示例
  7. 参考资料与出站链接

什么是 Rust 泛型与特性

  • 泛型 (Generics):Rust 中用于定义类型参数的机制,允许函数、结构体等在多种类型上工作,增强代码复用性。
  • 特性 (Traits):类似接口的抽象,定义一组行为(方法),类型通过实现特性来提供具体功能。

为什么要使用泛型与特性

  • 代码复用:泛型减少重复代码。
  • 类型安全:编译时检查类型约束。
  • 灵活性:特性允许不同类型共享行为。
  • 抽象能力:构建通用的库和框架。

泛型的基本用法

  • 语法:使用 <T> 定义类型参数。
  • 应用
  • 函数:fn foo<T>(x: T).
  • 结构体:struct Point<T>.
  • 枚举:enum Option<T>.
fn largest<T: PartialOrd>(a: T, b: T) -> T {
    if a > b { a } else { b }
}

特性的定义与实现

  • 定义:使用 trait 关键字。
  • 实现:使用 impl Trait for Type
  • 默认方法:特性可提供默认实现。
trait Printable {
    fn print(&self);
    fn default_print(&self) { println!("Default"); }  // 默认方法
}

struct Item(i32);

impl Printable for Item {
    fn print(&self) {
        println!("Item: {}", self.0);
    }
}

泛型与特性的结合

  • 约束:使用 T: Trait 指定泛型类型需实现某特性。
  • 多重约束T: Trait1 + Trait2
  • where 子句:提高复杂约束的可读性。
fn display<T: Printable>(item: T) {
    item.print();
}

代码示例

泛型函数

fn max<T: PartialOrd>(a: T, b: T) -> T {
    if a > b { a } else { b }
}

fn main() {
    println!("Max of 5 and 3: {}", max(5, 3));
    println!("Max of 2.5 and 1.5: {}", max(2.5, 1.5));
}

运行结果:

Max of 5 and 3: 5
Max of 2.5 and 1.5: 2.5

特性实现

trait Describable {
    fn describe(&self) -> String;
}

struct Person {
    name: String,
    age: u32,
}

impl Describable for Person {
    fn describe(&self) -> String {
        format!("{} is {} years old", self.name, self.age)
    }
}

fn main() {
    let p = Person { name: String::from("Alice"), age: 30 };
    println!("{}", p.describe());
}

运行结果:

Alice is 30 years old

泛型与特性结合

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

struct Article {
    title: String,
}

impl Summary for Article {
    fn summarize(&self) -> String {
        format!("Article: {}", self.title)
    }
}

fn print_summary<T: Summary>(item: T) {
    println!("{}", item.summarize());
}

fn main() {
    let article = Article { title: String::from("Rust Basics") };
    print_summary(article);
}

运行结果:

Article: Rust Basics

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 社区支持