62·进阶特性进阶

关联类型

关联类型

学习目标

  1. 理解关联类型的用途
  2. 掌握关联类型 vs 泛型参数
  3. 实现带关联类型的 trait

核心概念

基本语法

trait Iterator {
    type Item;  // 关联类型
    fn next(&mut self) -> Option<Self::Item>;
}

struct Counter {
    count: u32,
    max: u32,
}

impl Iterator for Counter {
    type Item = u32;  // 指定关联类型

    fn next(&mut self) -> Option<Self::Item> {
        if self.count < self.max {
            self.count += 1;
            Some(self.count)
        } else {
            None
        }
    }
}

关联类型 vs 泛型

// 关联类型:每个类型只能有一种实现
trait Iterator {
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}

// 泛型参数:可以有多种实现
trait Convert<T> {
    fn convert(&self) -> T;
}

// Vec 可以实现 Convert<i32> 和 Convert<f64>
// 但只能实现一次 Iterator

关联常量

trait Circle {
    const PI: f64 = 3.14159265358979;
    fn area(&self) -> f64;
}

默认关联类型

trait Add<Rhs = Self> {
    type Output;
    fn add(self, rhs: Rhs) -> Self::Output;
}

小结

概念说明
type Item声明关联类型
Self::Item使用关联类型
每个 impl 唯一关联类型只能指定一次

练习编辑器

rust
Loading...