【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
}

浙公网安备 33010602011771号