【Rust】trait

trait

trait 可以类比其他语言中的 接口(interface)抽象类。它定义了一组方法签名,但不实现具体逻辑,具体逻辑由实现该 trait 的类型提供。

trait TraitName {
    fn method(&self);
}

然后用 impl 为类型实现这个 trait: 

struct MyStruct;

impl TraitName for MyStruct {
    fn method(&self) {
        println!("MyStruct implements TraitName");
    }
}

 

可以在 trait 中提供默认实现:

trait Greet {
    fn greet(&self) -> String {
        String::from("Hello!")
    }
}

某个实现可以复用默认实现,也可以覆盖:

struct Robot;

impl Greet for Robot {
    fn greet(&self) -> String {
        String::from("Beep boop")
    }
}

 

Iterator是 Rust 标准库里的一个 trait,定义在 std::iter::Iterator 中。它是一个 trait,用于表示可以按顺序产生元素的对象。实现了这个 trait 的类型都可以通过 for 循环、.map().collect() 等方式使用。核心方法是:

trait Iterator {
    type Item;
    fn next(&mut self) -> Option<Self::Item>;
}
  • type Item; 是一个 关联类型(associated type),表示这个迭代器“产出什么类型的元素”。
  • 当你写 impl Iterator for X { type Item = u32; },你就在告诉编译器:这个迭代器的每个元素是一个 u32。
  • 所以它的 next() 方法返回的是 Option<u32>。

 

例子:

// 一个简单的计数器结构
struct Counter {
    count: u32,
    max: u32,
}

// 为 Counter 实现 Iterator trait
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
        }
    }
}

// 使用 impl Iterator<Item = u32> 类型参数
fn print_iter(it: impl Iterator<Item = u32>) {
    for val in it {
        println!("Got: {}", val);
    }
}

fn main() {
    let counter = Counter { count: 0, max: 5 };
    print_iter(counter); // 打印 1~5
}

 

posted @ 2025-07-05 16:36  苏格拉底的落泪  阅读(15)  评论(0)    收藏  举报